From a4670ac01d479890b4f62c6b4c77aee6fdaaacba Mon Sep 17 00:00:00 2001 From: Krumel Date: Thu, 6 May 2021 17:01:42 +0200 Subject: [PATCH] added template for server start script --- ServerStart.sh.template | 31 +++++++++++++++++++++++++++++++ auto_shutdown.sh | 0 readme.md | 16 ++++++++++++++++ update_index.sh | 0 4 files changed, 47 insertions(+) create mode 100644 ServerStart.sh.template mode change 100755 => 100644 auto_shutdown.sh mode change 100755 => 100644 readme.md mode change 100755 => 100644 update_index.sh diff --git a/ServerStart.sh.template b/ServerStart.sh.template new file mode 100644 index 0000000..50de1b9 --- /dev/null +++ b/ServerStart.sh.template @@ -0,0 +1,31 @@ +while true; do + # prevent the server from being stopped again immediately + date +%s > /home/minecraft/scripts/lp_stamp + # run the server itself + # replace the jolokia agent and the forge jar with your versions + java -jar -Xms20G -Xmx20G -javaagent:jolokia-jvm-1.6.2-agent.jar\ + -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100\ + -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50\ + -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=50\ + -XX:G1ReservePercent=20 -XX:ConcGCThreads=2 -XX:ParallelGCThreads=4\ + -XX:InitiatingHeapOccupancyPercent=25\ + -XX:+AlwaysPreTouch -Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps\ + -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M forge-1.16.5-36.0.1.jar nogui + echo "Server closed" + if (( $(cat /home/minecraft/scripts/lp_shutdown) > 0 )); then + echo "Server was empty for 14 days, waiting for connection..." + echo "0" > /home/minecraft/scripts/lp_shutdown + mcconn=0 + until [ $mcconn -ne 0 ]; do + mcconn=$(nc -l 25500 | cat -v | grep -cF '^@cM-^\^B') + if [ $mcconn -eq 0 ]; then + echo "Something connected, but it doesn't look like a minecraft connection" + else + echo "Someone tried to connect to the minecraft server, starting..." + fi + done + else + echo "Restarting server in 5 seconds..." + sleep 5 + fi +done diff --git a/auto_shutdown.sh b/auto_shutdown.sh old mode 100755 new mode 100644 diff --git a/readme.md b/readme.md old mode 100755 new mode 100644 index b1856ec..f960165 --- a/readme.md +++ b/readme.md @@ -44,6 +44,22 @@ Ein vollständigeres Regex, dass auf eine korrekte Verbindung prüft sieht so au ^\^X\^@M-r\^E\^Q[a-zA-Z0-9\.]+\^@[a-zA-Z0-9]+\^@cM-\^\\\^B\n\^@\^H[a-zA-Z0-9]+ ``` +### Server Start Skript + +Beim Starten des Servers wird eine große Menge an Parametern übergeben: + +* `-Xms20G -Xmx20G`: Wie viel Heap am Start und Maximal reserviert wird; sehr großzügig gewählt +* `-javaagent:jolokia-jvm-1.6.2-agent.jar`: Jolokia Agent, genutzt um Monitoringdaten aufzunehmen +* `-XX:+UnlockExperimentalVMOptions`: Schaltet ein paar experimentelle Optionen frei +* `-XX:+UseG1GC`: Welcher Garbage Collection Algorithmus genutzt wird; da Minecraft nur auf Java 8 läuft ist leider G1GC die beste Option + * `-XX:MaxGCPauseMillis=100`: Sagt dem GC dass es versuchen soll den Hauptthread nicht mehr als 100ms zu pausieren; ist keine Garantie! + * `-XX:+DisableExplicitGC`: Sorgt dafür das explizite GC Aufrufe ignoriert werden, da dass jedesmal ein Full GC ist und Modder das ab und zu (fälschlicherweise) verwenden + * `-XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1ReservePercent=20`: Setzt ein paar Größen für die verschiedenen "Bereiche" des GC Algorithmus; werden so empfohlen, kA was das genau macht + * `-XX:ConcGCThreads=2 -XX:ParallelGCThreads=4`: Threads die für die verschiedenen Phasen der GC verwendet werden; können gut auf hohe Werte eingestellt werdn, da MC praktisch nur einen Thread nutzt + * `-XX:InitiatingHeapOccupancyPercent=25`: Ab wann ein concurrent GC Cyclus gestartet wird in % vom Max Heap; niedrig eingestellt, da Minecraft sonst viel zu spät damit anfängt +* `-XX:+AlwaysPreTouch`: "Berührt" den Heap Speicher beim Starten der JVM +* `-Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1M`: Aktiviert das Logging der GC und richtet Logrotation ein + ## Update Index Kleines Skript, dass die html Seite die auf dem http(s) Port des Minecraft Servers angezeigt wird updated. \ No newline at end of file diff --git a/update_index.sh b/update_index.sh old mode 100755 new mode 100644