Server-Performance Diskussion

Dieses Thema im Forum "Technischer Support" wurde erstellt von Jobsti, 25. Oktober 2011.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    So, da es keiner macht, erstell ich das Thema ;)

    Ich habe schon recht viel dazu gepostet, nur eben in verschiedenen Themen als Posts,
    hier kann man mal alle Erfahrungen von allen Zusammentragen.

    Im Bukkit Forum tut sich da net sooo viel:
    http://forums.bukkit.org/threads/so...ons-and-experiences-about-your-servers.27647/
    Identische Thema im minecraft.de Forum, nur ist dort auch net jeder angemeldet:
    http://minecraft.de/showthread.php?62310-Server-Performance-Diskussion


    Wie es derweil bei uns ausschaut:

    Server:
    - OS: ESXI 4.1, Boot per USB Stick
    - VMs: 3
    - CPU: Phenom II X4 @ 4x 3,8gHz
    - Ram: 16 GB DDR3 Ram
    - Neustarts: Normal NIE (Bisher, 2x Hardwaretausch)
    - Sonstiges: 3Ware Hardware Raid* (keine Software Controller!) mit Samsung F1. USV
    * Hardware Raid = 2x Lesespeed im Raid-1, 1x Schreibspeed

    Minecraft-Server:
    - OS: Ubuntu Server 11 x64 als VM
    - JRE/JVM 1.7 x64
    - 10gb Ram und voller CPU fest zugeteilt
    - Raid-1, 16GB für Linux, 60Gb für MC
    - Sonstiges: 4x mySQL Datenbank, FTP + Webserver laufen zusätzlich
    - 18 Slots
    - 4 Welten (3 davon begrenzt auf Radius 750)
    - 60 Plugins, davon 2 Loggin/Rollback-Plugins jeweils mit mySQL Datenbank (Viel Kleinkram Plugins, viel für Loggin und Adminzwecke)
    - Plugins, welche die meisten Ressourcen fressen: mcMMO (ram), WorldGuard(cpu), BigBrother(ram), Hawkeye(ram), Minebackup(cpu), WAR (ram!), Dynmap HD (HDD, bissel CPU)
    - Derweil Craftbukkit #1337
    - Gestartet mit XMn2G, Xms4G, Xmx8G (weitere Startparameter rück ich nicht raus, is ne komplette Zeile)
    - Server-Neustarts: alle 4h automatisch
    - VM Neustarts: Nur bei Updates, bisher 2x in 3/4 Jahren.
    - Backups: Alle 30 Min safe-all, alle 90 Minuten werden alle Worlds gebackupt, max Backups 3 Tage (ab und an manuelle, Ältere), Kompression gering.


    Wie's läuft/Beobachtungen:

    Upload:
    Pro User 7-15 kb/s, bei Teleports (Warps, Portale, Tode, /home...) kurzzeitiger Anstieg auf 150-400 kb/s
    CPU:
    Mit 18 User online knapp 30-50% CPU Last, bei neuen Logins oder Weltenwechsel ganz kurze 80-90% peaks
    Ram:
    Java belegt derweil um die 2,5 bis 3,8gb nach 3-4h. Bei längerer Laufzeit (5-8Std.) ~4,2gb

    Die Performance ist allgemein etwas besser geworden seit den 1.8er builds, Traffic wurde seit den 1.7 builds auch schon mehrfach optimiert.
    Die benötigten Ressourcen verdoppeln sich nicht bei Verdopplung der User (Außer Upload)
    Mit weniger Plugins sollte die Last bei ~20 Usern so bei 20-40% schwanken, oder sogar noch geringer und weniger Ram schlucken, je nach Plugins und Parameter.


    Bisher getestete OS':
    Windows XP x86: kannste knicken
    Windows Server 2000 Ent. x86: Auch net viel besser
    Windows Server 2008 RC1 x64: Ebenfalls schlecht
    Windows Server 2008 RC2 x64: Wurde schon einiges besser, dennoch kein Vergleich zu Linux, vor allem was CPU anbelangt
    Open Suse Linux X64: Im Vergleich zu Windows schon ein enormer Sprung, CPU Last unter der Hälfte. Dafür macht's den Ram nicht mehr frei, somit alle 2-3 tage die VM restarten
    Ubuntu Server 11 x64: Bisher die beste Performance, maximal hatte ich 10h am Stück getestet, ging 1A. Restarts benötigt die VM absolut keine, bin glücklich.
    Es neueste Debian x64: hier berichten einige, dass es noch etwas besser laufen soll, wie viel kann ich net sagen, schätze aber im Vergleich zum Ubuntu, ist Debian dann nurnoch das i-Tüpfelchen ;)

    Upgrade CPU:
    Demletzt wurde von einem günstigen Athlon II X4 2,8gHz auf einen Phenom II X4 3,8gHz gewechselt.
    Den Unterschied merkt man doch schon deutlich, nicht nur die mHz, sondern auch der größere Chache machen's aus.
    Wie viel Performance das Upgrade auf einen reinen Server-CPU bringen würde (Xenon/Opteron) kann man nur erahnen,
    ich denke bei identischem Tahkt aber nicht mehr so viel im Vergleich zu einem Phenom II, respektive I5/I7.

    Top/Monitor - Last: (ich nutze idR. kein Top, sondern nen "live"-gui-Monitor)
    Java nutzt bekanntlich ja nur einen Kern/CPU, jedoch wird zwischen den Kernen gewechselt. Auch wenn man Java fest einem kern zuordnet,
    konnte ich kein Performance-Unterschied feststellen, außer, dass Funktionen wie Turbocore besser funktionieren!
    Hierbei habe ich beobachtet, dass "Top" eher die maximale Last angibt, nicht den Durchschnitt.
    Gerade vorhin habe ich gesehen: Last 4-11%, Durchschnitt also 7%, Top gibt allerdings 12% aus.
    Wenn Top zB. sagt: 122%, frisst's java um die 60-80% auf einem Kern, der Rest sind andere Dienste, oder kommts eher durch's "swichen" so meine Beobachtung,
    da Top alle Kerne mit einbezieht.


    Optimierungstipps:
    - Definitiv auf ein Linux umsteigen, 64 bit sollte mittlerweile eh Standard sein.
    - java 1.7 X64 hat schon etwas bessere performance gebracht, zudem braucht es weniger Startparameter als 1.6, da vieles schon fest "eingebaut" ist.
    - Passende Startparameter für Java nutzen, siehe hierzu die JavaDocs
    - Net wild einen Server aufsetzen und tausende Portale/Warps usw. setzen, hierbei ebenso auf die Hardware achten.
    - Plugins optimieren!:
    - Schaltet zB die High-freq. Flags & Scheduler in Welten aus, in denen man sie net brauchst.
    - Schaltet den Move-Event aus und nutzt für Region-Nachrichten andere Plugins
    - Nutzt low-priority-inserts
    - Lasst net alles Loggen, Leaf Decay und Fire braucht kein Mensch.
    - Backups nicht Komprimieren lassen, oder die Stufe auf niedrig stellen.
    - Nutzt Ebeans storage anstatt Cached
    - Einfach mal weniger Portale und Warps zur Verfügung stellen, gibts im SP ja auch net.
    - Bei großen Welten ggf. die Mobanzahl beschränken.
    - Caches, wie zB. bei LWC beschränken
    - usw. usw.

    Man kann wirklich sehr sehr viel optimieren, gerade bei den einzelnen Plugins,
    nicht nur die Java Startparameter machen's ;)

    Zusatztipps für schwache CPUs:
    Legt nen maximalen Radius der Welt fest (Border) und lass die Chunks darin schon alle vorher erstellen, somit gibt's keine Lags, wenn mehrere User
    die Welt erkunden.
    Zusätzlich könnt ihr eure Dynmap auch schon die Welt komplett rendern lassen, somit werden nurnoch Bilder veränderter Chunks neu erstellt.
    Bei schwachem CPU solltet ihr auchkeine HD Maps nutzen, oder diese eben auf Low oder Lowest rendern.
    Backups nicht komprimieren lassen, oder Kompression auf schwach stellen.


    Sonstiges:
    Vorgestern hat sich das Java komischerweise mit 8gb voll gefressen, was dem Linux nicht gefallen hat und das System fast zum Halt brachte.
    Das Linux hat nun 10gb bekommen, der Server XMn2G, XMs4G und XMx8G.
    Natürlich ein Fehler meinerseits, ich kann net dem Server 8GB geben, wenn das Linux nur 8Gb zur Verfügung gestellt bekommt ;)
    (Aber bisher kam es auch noch net vor, dass so viel Ram belegt wurde)

    Danach gab's direkt nen Belastungstest mit TNT :D
    Bei ca 4500 TNT gibt's 5 Sekunden Lag (100% cpu Peaks ), das paar mal gemacht (~20000 TNT), bis die Kiste seine 7,9GB Ram frisst, weiter hat sichs net gefüllt.
    /Lagmem zeigte minimal 19% freier Ram an, weiter hab ich die Kiste net voll bekommen. Lief dennoch alles Lagfrei damit.

    Doof: es Java macht sich net wieder frei, das bleibt dann bis zum Neustart bei 19-23% freier Ram.
    Auch ein Grund warum wir alle 4h automatisch Neustarten lassen.
    Ein Neustart dauert knapp 10 Sekunden, somit kann man das den Usern auchmal alle 4h zumuten, dafür rennt auch alles lagfrei, egal was ingame so angestellt wird!


    Kurzum:
    Sind die Plugins sparend eingestellt (geht bei vielen ja, siehe WG, da gibts gleich 4 Optionen pro Welt die Last verursachen!)
    Tipp: Lagts, nutzt /stoplag, danach /stoplag c, kann enorm helfen, wie unser TNT Test bei >4500 TNT zeigte ;)
    Warps, Teleports, somit auch Tode, verursachen CPU LastSpitzen, um so mehr also Sterben/Porten um so eher kommt der CPU an's Limit.
    Pro User benötigt man ca 7-15kb/s Upload, beim Warpen kurze 150-400 kb/s Peaks.
    Tiere und Mobs fressen CPU, um so mehr Welten damit um so mehr CPU Last, wobei Skylands wohl am wenigsten frisst.
    Multi CPU oder mehrere kerne bringen leider nix, da immer nur eine genutzt wird, somit lieber auf mehr mHz setzen.
    CPU Last und Ram steigt mit verdoppelter Useranzahl nicht gleichmäsig an, sondern weniger.



    Ich freue mich auf eure Diskussion!
    Was nix bringt:
    Wenn ihr eure Hardware postet, aber kein Mensch weiß, ob's ne VM ist oder nen Root mit (nicht) vollen oder geteilten Ressourcen.
    Auch postet bitte was ihr so beobachtet habt, wie die Performance bei euch ausschaut usw.
    Posts wie: "Root 8x 10 ghz, 128gb ram, rennt super lagfrei, nix festgestellt" könnt ihr euch sparen!
     
    #1
  2. muffin99
    Offline

    muffin99

    Registriert seit:
    11. August 2011
    Beiträge:
    128
    Bitte?

    Frage (ist nicht bös' gemeint): Was bringt das?!

    - Tipps zum Geldrauswerfen :D ??

    - Performencetipps (Ja, finde ich toll!)

    etc ??



    Nutzen hats ja vtl.

    [align=center][font='Trebuchet MS, Arial, sans-serif']Seht das bitte als Kritik. Kritik ist wohl erlaubt!![/font]
    [/align]
     
    #2
  3. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    Ich verstehe deine Frage net ganz, auch nich was das mit Geld zutun hat?!

    Was der Post bringt wolltest du fragen?

    - Mittlerweile haben sich schon mehrere Menschen für das Thema (im anderen Forum) bedankt, da sie einige Probleme in den Griff bekommen haben. (nicht jeder mietet reine Gameserver...)
    - Es ist interessant andere Hardware und Server zu vergleichen, wie diese jeweils laufen. Um evtl. Fehler und/oder Optimierungen zu finden.
    - Man kann sich anhand der Daten orientieren, welche Hardwaren man evtl. kaufen/mieten muss für sein Vorhaben, bzw. was mit der Vorhandenen circa möglich wäre.
    ___________________________________________________________________
     
    #3
  4. muffin99
    Offline

    muffin99

    Registriert seit:
    11. August 2011
    Beiträge:
    128
    [quote='Jobsti',index.php?page=Thread&postID=583#post583]
    Ich verstehe deine Frage net ganz, auch nich was das mit Geld zutun hat?!

    Was der Post bringt wolltest du fragen?

    [/quote]
    Scherz :)

    So in etwa. Naja - ist schon OK; Tut mir ein bissl. leid ;( ...

    Unnütze Frage: Wie lange hast du zum schreiben gebraucht?!

    Weitere Frage: Kann so ein Beitrag nicht zum "prahlen" benutzt werden?


    [align=left]Z.B.: Ich habe einen 8 Kern - Intel i7 Prozessor à 3,22 Ghz. RAM: 16 GB DDR3 Also kommt zu: Tolle Wurscht! Der Server der niemals laggt! :thumbsup: WICHTIG! Beispiel! :!: [/align]
     
    #4
  5. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    Naja, es ist nunmal so, dass nen Beitrag über Performance, Beobachtungen, Infos, Tipps usw.
    rein garnix bringt, wenn jegliche Systemin- und Serverformationen fehlen oder unvollständig sind.

    Prahlen wegen Hardware meinst du?
    Der Kram kostet doch mittlerweile rein garnix mehr, bis eben auf die 2 3 Serverkomponenten,
    bin bei weitem nicht der Einzige, der nen Servere zu Hause rumstehen hat.
    (oder liegts dran, dass in meinem ort nur Nerds wohnen?!)
    Ansonsten würde ich von meinem Zocker PC, Mess-PC, Recording PC, HTPC und Office PC erzählen, wobei 2 davon wassergekühlt sind ;)
    Wobei meine ProTools-Kiste eher an nen richtigen Server rankommen würde als mein Server :D (Aber das Ding braucht nunmal richtig Power)

    Achso, ich tippe übrigens recht schnell. (was logisch erscheint nach über 15 Jahren am PC, bzw. damals war ich oft am C64 *g* ich sag nur: LOAD "$",)
    Ich bin aber net so wie (leider) viele andere "Admins" (viele schimpfen sich gerne so, auch mit 0 Plan), und tausche gerne Erfahrungen aus und helfe weiter,
    gehört halt zum Hobby dazu.
    Hätte ich keinen eigenen Server hier stehen und volle Kontrolle darüber, hätte ich wahrscheinlich garnetmal so viel Lust auf Minecraft und/oder würde bei wem anders einfach mit-daddeln.
    Gerade das Probleme lösen, Konfigurieren, verbessern usw. macht Spaß.




    Aber ich zitiere dir nochmal gerne das Ende meines Beitrages:


    Wie du sicher merkst, sind wir sehr offtopic


    ________________________________________________________________________
     
    #5
  6. muffin99
    Offline

    muffin99

    Registriert seit:
    11. August 2011
    Beiträge:
    128
    [quote='Jobsti',index.php?page=Thread&postID=602#post602]Wie du sicher merkst, sind wir sehr offtopic
    [/quote]
    Jap.

    ________________________________________________________________________

    Zu unserum (dezentem) System muss ich sagen, dass ich da nicht viel sagen kann, da ich nur der Minecraft-Server-Admin bin. Denn der "echte" Server steht im Rechenzenturum (ich glaube).

    Jedenfalls erstaunlcih, denn der war eig. nur für Webmail und ca. 12 Webseiten gedacht (glaube ich...) und die Last steht auf 50 Player; hmm.

    Also mit bisher der maximal Last von (ich glaub') 10 Spielern wurde der Server etwas unruhiger. Aber wir sind ja noch nicht Online :rolleyes:

    Was ich oll' finde: Java gibt den Speicher nicht frei. Selbst wenn alle rausgehen. Nur mit Neustart *seufz*.Aber da kann ich nicht viel ändern bin ja nur "Minecraft-Admin" und der Server MUSS auf Windows Server 2008 laufen - falls relevant -

    Als wir neulich 8 Sieler online hatten lag die CPU im Durchschnitt bei ca. 17%. Der Ram war mit 687/1587 MB bei einer Stelle ausgelastet - ~43% (Oder so!) Lag' bestimmt daran, dass ich zu Permissions-Freudig bin *g*
     
    #6
  7. Zahl
    Offline

    Zahl

    Registriert seit:
    10. Juli 2011
    Beiträge:
    214
    Was sollte das denn auch bringen, wenn Java den Speicher wieder frei geben würde? Freier Speicher bringt im Grunde ja nichts, da er ungenutzt ist, und wenn man die RAM-Verteilung an alle laufenden Programme überkalkuliert ist das auch nicht grad das gelbe vom Ei...

    Übrigens ist die Aussage aus dem 1. Post, Java könne nicht mehr als ein CPU Kern nutzen grober Unfug o_O
     
    #7
  8. muffin99
    Offline

    muffin99

    Registriert seit:
    11. August 2011
    Beiträge:
    128
    Nanana, mehr INFOS, lieber Freund!

    [quote='Zahl',index.php?page=Thread&postID=605#post605]Was sollte das denn auch bringen, wenn Java den Speicher wieder frei geben würde? Freier Speicher bringt im Grunde ja nichts, da er ungenutzt ist, und wenn man die RAM-Verteilung an alle laufenden Programme überkalkuliert ist das auch nicht grad das gelbe vom Ei...
    [/quote]

    Das stimmt nun auch nicht! Wenn neue User reingehen, schellt der Speicher in die Höhe. Und - mehr Speicher = more USEFUL plugins oder mehr wichtige Admin Plugins -

    2. Hust?! Wie bist du denn informiert?! Minecraft benutzt Java und Minecraft behält seinen Speicher. Auch der Server.

    Es gibt ja Tramtüten... :sleeping:

    PS. Falls du meinst, wie ich das grad' noch mal lese. Der Speicher von Minecraft-Server (1534 MB oder so) wird beibehalten, dennoch gibt Java den eigenen MC Speicher nicht Frei. Äh was, O_O. [Ja ist ein bisschen komisch zu lesen aber so ist es bei meinem Server]
     
    #8
  9. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    Dann liegt's am schlecht programmierten MC Server und nicht an Java, dass nur ein Kern effektiv genutzt wird. Aber dieses Problem ist ja allgemein und schon lange bekannt.
    Vielleicht etwas schlecht ausgedrückt oben. Minimal wird, laut Bukkit Team, aber schon was auf andere Kerne ausgelagert, ich meine das war was bei der Chunk Generation, bzw. vom Levelgenerator.


    Wenn der Ram voll belegt ist, ist er voll belegt, ob das nun am MC liegt oder am Java selbst ist unwichtig.
    Ist der Ram voll, kann der Server laggen, so meine Beobachtungen. Die Ingame-Anzeigen zeigen, dass mit der Zeit (Wenn Server leer zB.) wieder
    etwas freigegeben wird, dennoch steigt dieser Wert ebenso immer weiter an, bis eben alles belegt ist.
    Es ist übrigens nen Unterschied ob Ram reserviert oder direkt belegt wird, mc macht beides.
    Wie schnell das geht, ist allerdings unterschiedlich.

    Nach unserem TNT Test ging's zB. nicht mehr unter die 7,8 gb runter, /stoplag hat dabei auch nicht geholfen. (Vom System hat er sich dann 8,1 gb belegt/reserviert)
    __________________________________________________________________
     
    #9
  10. Zahl
    Offline

    Zahl

    Registriert seit:
    10. Juli 2011
    Beiträge:
    214
    [quote='muffin99',index.php?page=Thread&postID=606#post606]
    Das stimmt nun auch nicht! Wenn neue User reingehen, schellt der Speicher in die Höhe. Und - mehr Speicher = more USEFUL plugins oder mehr wichtige Admin Plugins - [/quote]Der Server soll also immer gleich viel Speicher verbrauchen, egal wie viele User joinen... Oder was willst du damit sagen?

    Ich weiß nicht, wie bin ich denn informiert?

    Scheine gerade mit einer zu sprechen.

    Schau an, wenn man sich dann mal die Zeit nimmt und meinen Post wirklich liest, statt ihn nur zu überfliegen, kommen ja doch halbwegs gescheite Antworten. ;) Genau wie du es beschreibst ist es, aber das ist an sich nichts schlimmes. Dazu unten mehr.




    [quote='Jobsti',index.php?page=Thread&postID=610#post610]Dann liegt's am schlecht programmierten MC Server und nicht an Java, dass nur ein Kern effektiv genutzt wird. Aber dieses Problem ist ja allgemein und schon lange bekannt.
    Vielleicht etwas schlecht ausgedrückt oben. Minimal wird, laut Bukkit Team, aber schon was auf andere Kerne ausgelagert, ich meine das war was bei der Chunk Generation, bzw. vom Levelgenerator. [/quote]
    Jepp, und die Kompression von Chunkdaten die zum Client gehen. Auch andere Sachen liegen theoretisch in Threads ausgelagert. Ein Problem ist leider, dass bei Mojang scheinbar niemand wirklich was von Multiprozessorprogrammierung versteht, und im Bukkit Team auch nur sehr wenige. Oftmals ist die Syncronisation zwischen den Threads so grob/schlecht gemacht, dass diese oft aufeinander warten müssen und effektiv fast seriell laufen, wodurch man über Single-Threaded Performanz kaum hinaus kommt, obwohl Sachen in verschiedenen Threads passieren. Man muss allersdings auch sagen, dass es nicht sehr einfach ist, effiziente parallele Programme zu schreiben, besonders wenn diese häufige Synchronisation zwischen Threads benötigen.


    Richtig. Der reservierte Speicher ist der, den die VM vom OS angefordert hat. Den gibt Java nicht wieder frei, das ist so und lässt sich nicht ändern. Daher sollte man schonmal nicht überkalkulieren, wie du selber schon gemerkt hast. Warst du einmal bei 8GB, belegt der java-Prozess immer 8GB, auch wenn die Ingame-Anzeige wieder auf 1GB zurück gehen würde.
    Es ist unsinn, bei einer 8GB Maschine 5GB für Minecraft als Maximum zuzuweisen, 1.5GB für Spiel X, 1GB für irgend ein Java Webservice und nochmal 1GB für den Map-Renderer der jede Stunde läuft... Mit dem Gedanken "Wird schon nicht alles gleichzeitig laufen bzw. das Maximum ausschöpfen. Wenn es doch passiert, hat man einfach "verkackt". Das meinte ich mit überkalkulieren.
    Und wenn man vernünftig kalkuliert hat stört es theoretisch auch nicht, wenn alles permanent das Maximum belegt.

    Welcher Teil des reservierten Speichers belegt ist, liegt in der Hand von Javas Garbage-Collector und natürlich dem Programm selber, in dem Fall Minecraft. Der GC ist dafür zuständig, nicht mehr verwendete Klassen, die MC instanziert hatte, freizugeben. Dies passiert nicht unmittelbar, sondern wenn die JavaVM meint, dass es die richtige Zeit dafür ist. Dies ist z.B. wenn das Programm gerade nichts tut, da ein kurzes Anhalten des Prozesses dafür nötig ist. Wenn das Programm gerade eh nichts tut, würde diese Unterbrechung auch nicht bemerkt werden, so die Überlegung dahinter. Bei einem Server mit 20 Spielern drauf gibt es aber so einen Moment nicht mehr wirklich, da die CPU Last ab dann eigentlich permanent im zweistelligen Bereich liegen dürfte.
    Über die Jahre wurde Java mit immer besseren Methoden fürs GC ausgestattet, solche die mehrere CPU Kerne nutzen können und solche, die zumindest teilweise schon arbeiten können, während das Programm noch läuft (um weniger Performanceeinbrüche zu erhalten, logischerweise). Auch gibt es mittlerweile Optionen, um Java anzuweisen, das Garbage Collecten nach einer bestimmten Zeit abzubrechen, und eben nur so viel Speicher freizuräumen, wie in dieser Zeit möglich war. Auch das kann man sehr gut nutzen, um im konkreten Fall von MC die Lags zu reduzieren.
    Es könnte aber auch ein guter Auslöser für vollen Speicher sein. Bei zu agressiven Limits schafft es die VM dann nämlich, nur wenig Speicher freizuräumen bei jedem Durchlauf, sodass man sich langsam auf sein Speicherlimit zubewegt. Es ist einfach nicht mehr möglich. Man kann sich dadurch auch schön seinen Server kaputtoptimieren. 2 Stunden scheinen die neuen Settings besser zu sein, aber danach gibts laggs, weil das Speicherlimit erreicht ist, und FullGCs anfangen.
    Ein FullGC wird ausgelöst, wenn mit den gewählten GC Einstellungen nicht mehr genügend Speicher freigeräumt werden kann. Beim FullGC wird der komplette Server angehalten, jedes Objekt untersucht, und alle, die als nicht mehr benötigt erkannt werden, werden freigegeben. Dies gibt die maximale Menge Speicher frei, dauert aber recht lange, skaliert sogar mit der Menge des zugewiesenen Speichers. Bei 8GB kann das schonmal Lags von 5-10 Sekunden erzeugen.

    Schafft es aber auch der FullGC nicht, merklich viel Speicher freizuräumen, scheint es ein Memory Leak in der Anwendung selbst, also dem Minecraft Server, oder einem der Plugins zu sein. Dies ist schlichtweg ein Programmierfehler.


    Und genau das klingt auch danach. Allerdings habe ich den "TNT-Test" auch schon durchgeführt, und dieses Resultat noch nicht gehabt. Ich benutze zwar nicht die #1337, sondern eine leicht optimierte Build von kurz vor 1317, aber ich würde spontan vermuten, dass es eines deiner Plugins sein muss. Du könntest auch mal die GC Ausgaben auf der Konsole aktivieren, das Experiment wiederholen, und nachschauen, ob der Server wenn er am Limit ist auch FullGCs durchführt, oder nur normale. Es wäre interessant zu wissen, ob du FullGCs evtl. komplett deaktiviert hast, oder wie dein GC allgemein eingerichtet ist, aber ausgerechnet die Startoptionen meinst du ja nicht posten zu können...


    Ich habe bei mir zwar nur 7 Plugins laufen, aber allgemein nichts dergleichen beobachtet. Es gibt einen gaaaanz leichten Anstieg des Speicherverbrauchs mit der Zeit. Habe Tagsüber ca. 18-22 Spieler drauf, der Verbrauch liegt direkt nachm Starten bei ca. 1GB, nach 10-14 Tagen bei 2.5GB, dann starte ich neu, weil 3GB Limit ist. Viel TNT erzeugt kurzzeitige Lags und Client-Abstürze, sonst keine Auswirkungen.
     
    #10
  11. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    Dem Garbage-Collector habe ich 2GB zugewiesen, irgendwelche Verbesserungen habe ich dadurch allerdings nicht wirklich gespürt, (Aßer der Ram ist bis oben hin voll belegt = weniger lags)
    allerdings nen besseres Gefühl ;)

    Einige deiner angesprochenen Parameter nutze ich zB. in den Startparametern, Aber ja Memory Leak ist hier nen Problem, hier wurde vom Bukkit Team aber auch schon mehrfach dran gearbeitet,
    das merkt man recht stark, wenn man mal ne Vanillakiste aufsetzt.
    Deaktiviert habe ich nur ExplicitGC.


    da jetzt jemand da ist, der sich mit Java wohl wirklich auskennt, macht's natürlich Sinn die aktuellen Parameter zu posten, seit Java 7 habe ich auch welche gestrichen.
    Welche ich hiervon noch streichen könnte, bzw. welche noch Sinn machen würden, müsste ich mich nochmals einlesen, aber da habe ich grad net so Zeit und Lust für, zumal's auch im Normalbetrieb derweil problemlos läuft. ;)
    -server,-Xmn2G,-XX\:+UseConcMarkSweepGC,-XX\:+UseParNewGC,-XX\:+DisableExplicitGC,-XX\:MaxGCPauseMillis\=500,-XX\:SurvivorRatio\=16,-XX\:TargetSurvivorRatio\=90


    Clientabstürze gabs beim TNT Test bei uns keine.
    Mit weniger Plugins läufts natürlich auch einiges besser, ich vermute auch, dass Plugins wie Hawk und BB nicht ganz unbeteiligt sind bezüglich Ram, da sie eben jeden einzelnen Block und Aktion loggen,
    dennoch sollten sie nach kurzer Zeit den Ram wieder freigeben, was sie aber leider nicht tun.


    Übrigens vielen Dank für deinen sehr informativen Post! Und schon macht das Thema hier wieder Sinn.


    Edit:
    Ich mache jetzt gerade noch mal nen Test. Alle Ram Werte halbiert (1g 2g 4g) und Autorestart aus, schaue dann wie es gegen Abend oder Morgen ausschaut.

    ___________________________________________________________________________
     
    #11
  12. Zahl
    Offline

    Zahl

    Registriert seit:
    10. Juli 2011
    Beiträge:
    214
    Habe die Optionen mit den Survivor-Ratios weggelassen, da ich keine Ahnung habe, wie das Verhältnis bei nem MC Server typischerweise aussieht, wie lange Objekte leben etc... Kann aber gut sein, dass man da mit den richtigen Werten noch gut was rausholt. Für Experimente fehlte mir da die Zeit ;)

    Drin habe ich noch -verbose:gc -XX:parallelGCThreads=5 -XX:+AggressiveOpts
    mit der ersten Option bekommt man die Debug-Infos zum GC auf der Konsole, nämlich wie lange der Server tatsächlich angehalten wurde, wie der Speicherverbrauch gesenkt werden konnte in dem Durchlauf, und ob es ein FullGC war oder nicht. Mit der 2. Option setze ich einfach die Zahl der Threads, die der GC nutzt, der kann nämlich auf mehreren Kernen gleichzeitig ackern. Habe in meinem Fall nur 5 genommen, weil der Server auch noch für andere Dinge da ist.
    Vor den AggressiveOpts wird immer am meisten gewarnt, da die Option experimentelle Optimierungen in Java aktiviert, die noch nicht ausreichend getestet sind, und somit Bugs enthalten könnten. Habe das seit 2 Wochen drin, und bisher keine Probleme gehabt. Man sollte aber auf jeden Fall sagen, dass dies die heikelste Optimierungsmöglichkeit ist. Messbar besser wird es dadurch übrigens nicht, aber das ist bei kleineren Optimierungen ja sowieso schwer festzustellen. Dazu sind einfach zu viele Variablen im Spiel.
    Bei mir limitiert wie gesagt leider eher die CPU als der Speicher, da ist es etwas schwerer mit den Optimierungen.
     
    #12
  13. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    Kann das sein, dass die ParallelGCThreads für Intel eine größere Rolle spielen als für AMD CPUs? (hat ggf. auch was mit HT zutun?!)
    Ich habe hier mit bestimmten Werten entweder Fehler (Cirtical Error mit bezug auf die Threads und Server direkt aus) oder kann absolut keinen Unterschied feststellen.
    Fehlermeldungen habe ich aber leider netmehr im Kopf.

    Den Tipp zum Wert der SurvivorRatio habe ich übrigens aus dem Bukkit Forum, da hat wohl schon mal wer schwer experimentiert.
    AggressiveOpts haben bei mir Probleme gemacht, deswegen gestrichen seit JRE 1.7.


    Achso,
    habe den Server nun mal 24h mit den zuvor geschriebenen Werten (1G 2G 4G) laufen lassen, bewegt sich alles im grünen Bereich und bleibt zwischen der 1-2 gb Marke sobald der Server wieder leer ist (heute morgen sogar nur 1,1gb mit 1 User)
    Was mir aber aufgefallen ist, dass der Weltenwechsel bedeutend länger dauert nach der langen Laufzeit, obwohl der Ram bei weitem frei genug ist! Nach nem Restart geht's wieder ruck zuck.

    Nun habe ich der Kiste wieder sicherheitshalber ihre 2G 4G 8G gegeben und lasse sie vorerst mal alle 8h neustarten, nicht mehr alle 4h.
    Mal schauen wie lange der Wechsel nach 6-8h dauert.
    ______________________________________________________________________
     
    #13
  14. Zahl
    Offline

    Zahl

    Registriert seit:
    10. Juli 2011
    Beiträge:
    214
    Dass ParallelGCThreads auf einigen CPUs etwas effizienter läuft als auf anderen könnte zwar theoretisch sein, verbessern sollte es die Situation aber eigentlich trotzdem, und keine Fehler verursachen. Höchst verwunderlich.

    Benutzt du eigentlich Spout? Wenn nicht, und falls du keine Plugins hast, die damit in Konflikt stehen würden, probier das auch mal aus. Weltenwechsel und Teleports gehen damit spürbar schneller und weicher von statten.
     
    #14
  15. Jobsti
    Offline

    Jobsti

    Registriert seit:
    18. August 2011
    Beiträge:
    1.226
    Ort:
    Steinau (Hessen)
    Minecraft:
    Jobsti
    Spout ist schon drauf, seit's bukkitContrib hieß ;)
     
    #15
Status des Themas:
Es sind keine weiteren Antworten möglich.