• Bitte beachte, dass wir eine Serverliste sind!
    Wenn du ein Problem auf einem Server hast (z.B. Entbannantrag, etc), dann ist das Forum hier der falsche Ort.
  • Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

CLOSED

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Du reservierst für jeden Server 2GB Heap.
6 * 2 = 12.

Dazu rechnet man noch ein, dass der -Xmx Wert nicht das absolute Maximum an genutztem Arbeitsspeicher der VM ist, sondern lediglich der verfügbare Heapspeicher für die Applikation die ausgeführt wird.

Es kann ziemlich gut sein, dass du in Wirklichkeit relativ nah am Limit bist, auch wenn ich das für nicht ganz so wahrscheinlich halte.
Welche Ressourcen nutzt denn dein BungeeCord?

Kannst du mir evtl. einen Screenshot des Befehls "top", oder "htop", sofern installiert, zukommen lassen?

Was läuft sonst noch so auf dem Server, was RAM fressen könnte?
MySQL schätze ich, aber da bräuchtest du schon ordentliche Datenmengen um das bemerkbar zu machen.
MongoDB, Redis, Memcached? WebServer, sonst was?
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Ist das der komplette Stacktrace? Falls du selbständig etwas abgeschnitte hast, fügt bitte den kompletten Stacktrace ein.

Es gibt 2 mögliche Fehlerursachen: Du hast keinen Arbeitsspeicher übrig. Das würde man aber in einem vollständigen Stacktrace sofort sehen.

2. Möglichkeit: Ihr habt ein missratenes Plugin in eurem Server, dass zu viele Threads erzeugt. Ob das der Fall ist, könnt ihr mit htop oder sowas selbst nachprüfen, indem ihr euch die aktiven Threads anzeigen lasst. Das würde heißen irgendwo ist ein Fehler, der viel zu viele Threads erzeugt. Alternativ könnte es sein, dass das Threadlimit auf dem System durch die Virtualisierung absichtlich beschränkt wurde, das kann man auch irgendwie rausfinden, aber das hab ich gerade nicht im Kopf. Überprüft vielleicht als erstes mal wieviele Threads eure Server so erzeugen.

Siehe Edit weiter unten.
 
Zuletzt bearbeitet:

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Ihr habt ein missratenes Plugin in eurem Server, dass zu viele Threads erzeugt
Das müssten aber extrem viele Threads ein, abhängig vom eventuellen Limit... oder?
@Dave_22 Welche Plugins nutzt ihr so? Eigene?
Sowas ist mir bisher nicht untergekommen :eek:

Ließe sich das Problem denn lösen oder minimieren indem ich in die Startscripte noch das "MaxPermSize"
Im Gegenteil, abgesehen davon ist es ab Java 8 ohnehin wirkungslos.

Lass einfach mal das -Xms weg.
Damit überbuchst du evtl. irgendwann die physikalische Menge an Speicher (rein theoretisch), aber wenn du nicht schlagartig alle 2GB auf jedem Server nutzt, tritt da auch kein Problem bei auf.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
PacketListener-API und ProtocolLib gleichzeitig zu betreiben klingt toxisch.

Ansonsten:
Lass einfach mal das -Xms weg.
Damit überbuchst du evtl. irgendwann die physikalische Menge an Speicher (rein theoretisch), aber wenn du nicht schlagartig alle 2GB auf jedem Server nutzt, tritt da auch kein Problem bei auf.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Das müssten aber extrem viele Threads ein, abhängig vom eventuellen Limit... oder?
@Dave_22 Welche Plugins nutzt ihr so? Eigene?
Sowas ist mir bisher nicht untergekommen :eek:
Ich sag ja, das müsste ein Fehler sein. Wenn du für jeden Spieler, der z.B. einem Minigame joint einen Thread mit einem Timer startest und der sich am Ende nicht beendet, dann hast du Problemlos innerhalb weniger Tage das Threadlimit erreicht.

@Dave_22 Ich kann die Plugins nicht auswendig. Bitte prüfe einfach selbst dein System ob du da das Threadlimit erreichst.

Ich hab dir hier mal schnell ein paar Links rausgesucht, die dir vermutlich helfen:
https://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux
https://stackoverflow.com/questions...active-thread-count-of-a-process-jvm-on-linux

Wie gesagt, das ist nur eine Vermutung. Es kommen mehrere Probleme in Frage. Ich vermute aber das Kernellog enthält ebenfalls Informationen dazu. Musst du halt selbst bisschen nachforschen und die Uhrzeiten aufeinander abstimmen, damit du den richtigen Teil findest. Das klingt aber alles sehr nach knappen Systemresourcen, von daher würde ich hier zuerst anfangen um nicht weiter im Nebel zu stochern.


Edit: Okay, ich hab gerade gesehen, dass das ja ein OutOfMemoryError ist, das ist mit davor entgangen. In diesem Fall ist das was zuvor gesagt wurde wohl in der Tat korrekt. Du hast keinen Arbeitsspeicher mehr übrige. Überprüf den Arbeitsspeicher, den Minecraft anfordert.
 
Zuletzt bearbeitet:

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
@Dave_22 Das sind lediglich weitere Threads, das ist erstmal kein Problem, sofern wir nicht irgendwann bei 100 oder mehr davon angekommen. Jeder Thread unter Linux bekommt eine eigene Prozess ID und wird auch teilweise als eigener Thread behandelt. Das ist erstmal kein Grund zur Sorge. Was ich zuvor darüber geschrieben habe, dass eventuell zu viele Threads erzeugt werden ist vermutlich nicht korrekt. Ich habe übersehen, dass der Server aufgrund von zu wenig Speicher keinen neuen Thread starten kann. Das heißt es handelt sich vermutlich nicht um ein Problem mit zu viele Threads. Ich guck mir den Thread nochmal später an, wenn ich mehr Zeit hab.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
@Dave_22 Okay, fangen wir am Anfang an. Alles unter /proc/ sind keine echten Dateien. Das sind Kernelparameter, die ins Filesystem gemappt sind. Man ändert die Wert dort nicht indem man die Datei in einem Editor öffnet. Man schreibt einfach den neuen Wert rein. In deinem Fall würde das daher so aussehen:

echo 65530 | sudo tee /proc/sys/vm/max_map_count

oder direkt als root (ohne sudo)
echo 65530 > /proc/sys/vm/max_map_count

Damit setzt du Kernelparameter zur Laufzeit. Nach einem Neustart sind die Änderungen verworfen. Du änderst hier übrigens das Pagingverhalten vom Kernel, du hast mit ziemlicher Sicherheit keine Ahnung was du hier änderst und ich würde dir daher auch empfehlen solche Änderungen nicht durchzuführen.

Zu dem eigentlichen Problem: Der Server wird beendet, weil Java nicht genügen freien Speicher zur Verfügung hat. Arbeitsspeicher überwachen ist immer ein bisschen kompliziert, da der Kernel bestimmte Dinge tun kann, die den wirklich genutzten Speicher massiv vom angezeigten Speicher abweichen lassen. Du setzt den Java Heap für jeden Server fest auf 2GB. Das heißt bei 6 Servern, sind 12 GB definitiv weg. Dazu hast du auch eine MySQL Datenbank laufen, die je nach Konfiguration ebenfalls 2-3GB verbraucht. Die genauen Parameter dafür sind aber in der Konfiguration einstellbar. Bitte ändere auch hier keine Werte, die du nicht verstehst. Auf jeden Fall solltest du dir auch mal ansehen wieviel Speicher andere Anwendungen benutzen. Das Problem hier ist, dass Linux overcommitment unterstützt. Das heißt eine Anwendung kann mehr Speicher anfordern, als eigentlich vorhanden ist. Daher ist es wichtig, dass man weiß, wie man die Nummern korrekt interpretiert. Ich empfehle für den Speichervergleich htop und dass du die Antwort in diesem Link liest und verstehst: https://serverfault.com/questions/238302/memory-usage-numbers-in-top-htop

Das braucht unter Umständen einen Taschenrechner aber da rechnest du dir erstmal selbst aus, ob das alles passt. Wie auch davor schon erwähnt wurde braucht Java durchaus mehr als nur die 2GB, die du vorgibst.

Ansonsten gibt es noch zwei interessante Punkte, an denen du ansetzen kannst. Zuerst frage ich mich, ob die Server jedes mal beim Starten eines neuen Threads crashen oder nicht. Es wäre sehr merkwürdig, falls immer ein neuer Thread die Ursache für einen Crash ist. Passender Link dazu: https://stackoverflow.com/questions/20030120/java-default-stack-size wobei ich auch hier glaube, dass du das verstehst und dir daher davon abrate irgendwelche Änderungen an diesem Parameter zu machen. Zuerst solltest du klären, ob jedes mal ein neuer Thread den OutOfMemoryError auslöst. Wenn der Fehler NIE auftritt, wenn du nur 4 Server laufen lässt, dann ist das ein klares Zeichen, dass der Hauptspeicher deines Servers nicht ausreicht, denn der Heap ist durch das Maximum von 2GB immer das selbe, egal wieviele Server laufen. Das wäre allerdings sehr interessant, da keine Anwendung so viel Arbeitsspeicher anfordern sollte.

Der schnellste Weg um das Problem zu finden ist ein Heap Dump. Das ist ein extra Schalter, den man beim Starten der JVM übergeben kann. Das sorgt dafür, dass Java bei einem Speicherfehler den kompletten Heapspeicher auf die Festplatte schreibt (daher darauf achten, dass du ordentlich Speicher frei hast). Diesen Speicherdump kannst du dir dann runterladen und analysieren. Das erfordert aber dann doch schon einige Kenntnisse. Jedenfalls siehst du darin dann ganz genau welche Objekte und Datenstrukturen wie viel Speicher belegt haben und kannst daher in der Regel auch schnell die Quelle des Speicherlochs finden. Hier Hierzu: https://stackoverflow.com/a/10944139

Software zum Analysieren eines Heap Dumps: http://www.eclipse.org/mat/ (oder andere Software einer Wahl, Google ist dein Freund).
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Hallo Zusammen,
vielen Dank für eure sehr ausführlichen Antworten. Ich habe heute mal die Gelegenheit gehabt, mit einem unserer Developer über das Problem zu sprechen. Wir haben dann nochmal beim Hoster nachgesehen und festgestellt, dass es ein Prozesslimit (Numproc) für die V-Server gibt, welches auf 425 gesetzt ist. Wir gehen beide davon aus, dass dort die Ursache des Problems liegt.

Was sagt ihr dazu?

LG Dave_22
Es gibt ein Thread- und ein Prozesslimit und ich weiß nicht, ob Threads in diesem Rahmen ebenfalls als Prozesse gezählt werden. Eventuell habt ihr aber sogar beides. OpenVZ unterscheidet da nicht. Das klingt jedenfalls mal nach einem guten Grund, dass der Server irgendwann keine neuen Threads erzeugen kann und sofern der Fehler auch immer mit der selben Meldung erscheint, ist das der wahrscheinliche Grund. Ihr könnt mal gucken, ob ihr die Threads von einigen Programmen vielleicht reduzieren könnt. 425 Prozesse ist jede Menge, falls dort aber auch Threads dazu gezählt werden, könnte das durchaus hinkommen. Mit bisschen Google findet ihr aber sicher selbst raus, wie ihr das alles selbst überprüfen könnt. Ich hab hier gerade keine Möglichkeit das selbst zu testen.

Du kannst aber mal die Ausgabe von /proc/user_beancounter hier posten. Darin sind die OpenVZ Limits hinterlegt.

Edit: Laut OpenVZ Dokumentation beschreibt der Wert "numproc" sowohl das Prozess als auch das Kernel-Level Threadlimit. Das heißt also hier stößt hier vermutlich in der Tat an das Limit. (https://openvz.org/UBC_primary_parameters#numproc). Um das genauer zu untersuchen, könnt ihr der verbleibenden Threads über die selbe Datei überwachen und so selbst festellen, ob ihr da beim Betrieb von mehreren Servern auf einen Enpass stößt. (Vergleich "held" mit "limit")
 
Zuletzt bearbeitet:

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Hier ist die Datei: https://pastebin.com/aV7GW0tK

Da ist numproc auf 425 gesetzt...
numproc 396 425 425 425 126

Das heißt von 425 Prozessen/Threads sind im aktuellen Zustand schon 396 belegt und "maxheld" steht auf "425", das heißt es kam während der Systemausführung bereits zu einem Engpass. Wenn du jetzt einen weiteren Server startest oder ein paar Asynchrone Threads am laufen hast, ein paar Anfragen auf dem Webserver bekommst oder die Datenbank ein wenig Arbeit bekommt ist das Limit erreicht. Damit dürfte dein Problem aber gefunden sein, du musst die Anzahl der Prozesse/Threads verringern. Zuerst würde ich damit anfangen die Prozesse mit den meisten Threads zu finden und dort anzusetzen. Ich vermute fast, das werden die Minecraftserver sein, aber da kann ich dir nicht sagen, wie du die Standardkonfiguration überschreibst. Ansonsten hast du ja mit htop gesehen, wie du die Threads selbst siehst, mit ein wenig Google findest du da bestimmt auch noch raus, wie du das vielleicht in einer schöneren Form bekommst. Ich kenn da auch gerade keine bessere Software. Auf jeden Fall ist das Problem tatsächlich wie anfangs vermutet ein Threadlimit.
 
Oben