sehr hohe CPU- und RAM-Auslastung beim neue Weltteile entdecken

  • Wir haben einen recht neugierigen Spieler auf unserem Server. Als er eines schönen Tages so durch die (Spiel-)Welt schlenderte, wurde kurze Zeit später der Server heruntergefahren.
    Beim Kontrollieren der Logs stieß ich dann auf diese Fehlermeldung:

    Code: restart.log
    Wed, 28 Feb 2018 16:42:06 +0100: Stopping server due to heavy CPU (%CPU 891) usage although server has no active players. Please try to fix Plugins or Map or contact support!2018-02-28 15:50:31 Server restart requested (Webinterface)


    Die zu diesem Zeitpunkt passende Logdate habe ich dann auch gleich durchgesehn:


    Ich kenn mich ja leider nicht ganz so toll aus, aber schon auffällig sind da die zum Ende hin extremlangen Zeiten beim Laden und generieren der Worldparts. Teils weit über 2000 ms.



    Serverbetreiber ist Nitrado.
    Dort zeigt es fast Live den CPU- und Speicherverbrauch an. Wir haben das dann nochmal probiert:
    - Server Neustart, CPU um die 3 %, RAM knapp über 300 MB
    - 2 Leute Arbeiten an den Werkbänken und bauen mit Blöcken und Holz, CPU 5 - 8 %, Ram geht leicht über 500
    - so un den Dreh bleiben die Werte dann auch
    - bis dann Einer der Beiden entdecken geht, also so dass neue Worldparts generiert werden müssen, also laufen in Gegenden wo noch Niemand vorher war, dann geht die CPU recht schnell auf gut über 90% hoch, nicht dauerhaft, nur ganz kurze Spitzen, der RAM geht ganz fix auf 1034 und hängt dann dort fest, in der Serverconfig sind 1024 MB eingestellt


    Leider kann ich nicht sagen seit wann dieser Effekt auftritt, da wir auf unserem Server fast ein Jahr so gut wie nicht mehr gespielt hatten und erst jetzt nach dem Update auf die 0.9.2.3 wieder aktiv werden wollen.
    Sicher kann ich aber sagen dass wir solche Probleme früher nicht hatten.


    Ein paar Fragen:
    - Kann es damit zusammenhängen, dass wir auf unserm Server immernoch SQlite und (noch) nicht MySQL verwenden?
    - Sollten wir da umstellen? Oder ab wann (wieviel Spieler oder Weltgröße) lohnt sich das?
    - Sollten wir Nitrado ansprechen und für mehr RAM-bereitstellung sorgen?
    - Kann ich an der Config was anpassen um die Situation zu verbessern?


    Mit freundlichem Gruß
    Micha
    vom Moria-Server
    Serverbetreiber ist Nitrado

  • Dass Worldparts teilweise mehr als 2 Sekunden zum generieren brauchen ist - abhängig von der CPU - normal (immerhin enthält ein Worldpart mehr als 73.000 Chunks) ;) Damit das ganze aber nicht zu problematisch wird, werden Worldparts nach dem erstmaligen Generieren im "cache" Ordner abgespeichert (das Laden dieser Worldparts geht dann deutlich schneller vonstatten). D.h. es fällt vor allem dann ins Gewicht, wenn diese Teile der Welt zum ersten Mal geladen werden (vor allem wenn man fliegt).


    Die Meldung von Nitrado ist dennoch problematisch: Der Server wurde heruntergefahren, da er zu viel Last generiert hat obwohl keine Spieler darauf spielen würden. Das Problem ist aber, dass Nitrado nicht erkennt, ob Spieler auf dem Server spielen. Für Queryanfragen wird der falsche Port verwendet (4256 anstelle von 4254), wodurch auch in regelmäßigen Abständen auch im Log ein Fehler auftritt (da der Server das als neuen Client intepretiert). Wir hatten Nitrado bereits diesbezüglich kontaktiert, aber ich fürchte, dass das untergegangen ist...
    Jedenfalls ist die Folge, dass Nitrado niemals Spieler auf dem Server erkennt, wodurch er nun durch zu hohe Last abgeschaltet wurde (die Meldung impliziert zumindest, dass das nicht passiert wäre, wenn Spieler online wären).


    Andererseits ist 1 GB RAM auch recht wenig. Das ist eher dafür geeignet, wenn nicht viel gebaut wird und nur wenige Spieler auf dem Server spielen. Das kann die Situation in dem Fall nochmals verschärfen.
    Das Hauptproblem bleibt aber vermutlich eher die CPU. Hier können wir natürlich keine Aussage darüber treffen, welche CPU bei Nitrado verwendet wird und wieviele Server sich eine CPU teilen. Üblicherweise werden meist größere CPUs verwendet (zB 32 Kerne) und darauf laufen dann viele Server Instanzen.


    Ob am RAM was gemacht werden müsste könntest du Ingame überprüfen. Die Memoryanzeige bei Nitrado wird vermutlich nicht den korrekten Memoryverbrauch widerspiegeln, da Java grundsätzlich mehr RAM reserviert, als verbraucht wird (d.h. es kann sein, dass bereits beim Start 1 GB RAM reserviert werden [auch der Windows Taskmanager bspw. würde dann sagen, dass Java 1 GB RAM verbraucht], obwohl der tatsächliche Verbrauch nur bei 400 MB liegt).
    Um eine verlässliche Auskunft über den RAM-Verbrauch zu erhalten, kannst du ingame den Konsolenbefehl getserverinfo memory eingeben. Der relevante Wert steht bei "Used memory". Am besten den Befehl mehrmals hintereinander eingeben, da sich der RAM Verbrauch schlagartig ändern kann.


    Ein Wechsel von SQLite auf MySQL kann sinnvoll sein, wenn mehrere Spieler auf dem Server spielen. Ansonsten bleibt der Leistungszuwachs eher überschaubar ^^


    Ich würde empfehlen, den Nitrado-Support zu kontaktieren. Ein Problem ist hier nämlich die Erkennung, ob Spieler auf dem Server sind oder nicht. Ich weiß natürlich nicht, ob der Server sich anders verhalten hätte, wenn Spieler erkannt worden wären, das wäre aber zumindest naheliegend. Über den Queryport 4254 lässt sich die Spielerzahl auslesen, nicht aber über den von Nitrado verwendeten Port 4256.

  • Hallo red51,


    Vielen Dank für die ausführliche Antwort.
    Ich habe bei Nitrado mal ein Supportticket geschrieben.
    Wenns wirklich nur der Queryport ist, dann sollte das ja nicht weiter problematisch sein und fix behoben werden können.


    Danke auch für den TIP mit dem Konsolenbefehl. Ich werde die nächste Zeit den RAM-Verbrauch mal im Auge behalten.


    Eigentlich hatten wir ja früher auch keine Probleme. Wir bauen ja recht viel, sind aber meist nur um die 4 bis 5 Leute zur selben Zeit auf dem Server. Also nicht gerade die große Spieleranzahl.


    Das mit der Datenbankumwandlung lass ich erstmal. Für uns ist der große Vorteil an SQlite, dass falls mal mit dem Server was ist, ich die Worlddateien einfach auf meine lokale Maschine kopieren und so wieder einen Moriaserver in Berieb nehmen kann. Das einfache kopieren der Dateien macht auch den Umgang mit Sicherungen sehr einfach.


    Viele Grüße
    Micha

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!