• 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!

Multiple Server auf einem vServer = Problem

Sora_FL

Minecrafter
Registriert
6 September 2020
Beiträge
4
Diamanten
300
Hallo erstmal...
ich habe schon lange und oft hier im Forum gesucht und auch immer mal wieder eine Antwort auf meine Fragen gefunden, ohne das ich jemals eine eigene stellen musst... doch nun ist es so weit, ich habe ein Problem und konnte so bisher noch keine Lösung finden, und hoffe das mir jemand von euch evtl. dabei helfen kann.

Folgende Situation: Ich habe einen "kleinen" vServer (Debian10, Eckdaten s.U.) auf dem ich ein Minecraft-Server-Netzwerk betreiben möchte. Folgende Server sollen darauf laufen:
-BungeeCord-Proxy
-1x Lobby
-1x Survival-Server
-1x "Farmwelt"
-2x Minigames (jeweils mit ca. 5 eigenen kleinen Servern)
= 14 Server

Jedes für sich betrachtet funktioniert auch alles einwandfrei und ohne größere Probleme. Nur sobald ich versuche alle Server gleichzeitig laufen zu lassen fangen die Probleme an.
Natürlich läuft jeder Server über seinen eigenen Port. Dennoch schaffe ich es nie mehr als 3-5 Server gleichzeitig laufen zu lassen. Ich verstehe jedoch einfach nicht warum...

Folgende Fehlermeldung bekomme ich in der Console:
[warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 1024k, guardsize: 0k, detached.
[IO-Worker-15/ERROR]: Caught exception in thread Thread[IO-Worker-15,5,main]
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
at java.lang.Thread.start0(Native Method) ~[?:?]
at java.lang.Thread.start(Thread.java:803) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1005) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]

Daraus schließe ich, dass entweder mein RAM voll ist, oder aber das Limit der Prozesse erreicht ist, die ich ausführen darf.

free gibt folgendes aus
total used free shared buff/cache available
Mem: 62914560 11280520 50684300 27168 949740 51606872
Swap: 0 0 0

und top das nun folgende
top - 11:06:27 up 15:12, 1 user, load average: 3,80, 6,29, 5,78
Tasks: 57 total, 1 running, 56 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4,9 us, 0,0 sy, 0,0 ni, 95,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Mem : 61440,0 total, 49529,6 free, 10980,8 used, 929,6 buff/cache
MiB Swap: 0,0 total, 0,0 free, 0,0 used. 50432,5 avail Mem

ulimit -u dann noch das hier
62987

Ich sehe also nicht das ich hier irgendwo an irgendwelche grenzen stoße... Wo genau liegt denn nun das Problem? Und kann mir evtl einer bei der Lösung helfen?
Oder kann es daran liegen das es sich hierbei "nur" um einen vServer und nicht um einen root-Server handelt?
Ich danke euch bereits in Vorfeld für eure Bemühungen.

Hier noch die Eckdaten meines "kleinen" vServers

16 CPU vCore
60 GB RAM garantiert
1,5 TB SSD
Virtuozzo Virtualisierer

Ach so, hier noch mal ein eines der Start-Skripte mit denen ich die einzelnen MC-Server Starte

starthauptwelt.sh:
#!/bin/bash

BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"

screen -d -m -S "Hauptwelt" bash -c "sh ./loophauptwelt.sh"

loophauptwelt.sh:
#!/bin/bash

BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
cd Hauptwelt
echo "\033]0;Hauptwelt\007"
echo "$BINDIR"
echo "Starte den Hauptwelt-Server..."

while true
do

  java -Xmx4G -Xms4G -jar spigot.jar

  echo 'Willst Du den Server komplett stoppen, benutze STRG-C, \nbevor die Zeit bei 1 ist!'
  echo "Rebooting in:"
  for i in 5 4 3 2 1
  do
  echo "$i..."
  sleep 1
  done
  echo 'Server neustart!'
done

Solltet ihr noch weitere Informationen benötigen, lasst es mich wissen.
 

Taminoful

Schafhirte
Registriert
3 August 2012
Beiträge
137
Diamanten
390
Minecraft
Taminoful
hmm... also meinst du das die Grenzen / Limitierungen meines vServer-Anbieters erreicht sind und dieser mir nicht mehr zur Verfügung stellt, obwohl die eigentlichen Kapazitäten des vServers selbst noch nicht am Limit sind? Oder wie habe ich deine Aussage nun zu verstehen?
Nein. Das kann genauso gut heißen, dass der Benutzer mit dem du deine Startscripts ausführst einfach sein Threadlimit, Processlimit oder Open File Limit erreicht hat. Du kannst die Limits die ein Nutzer hat mit dem Befehl ulimit -a einsehen.

Um die offenen Prozesse eines Nutzers zu sehen bietet sich folgender Befehl an:
ps -U Benutzername | wc -l

Um die offenen Threads eines Nutzers zu sehen, kann man folgenden Befehl nutzen:
ps -u Benutzername -o nlwp= | awk '{ num_threads += $1 } END { print num_threads }'

Um die "offenen Files" eines Benutzers einzusehen, kann man folgenden Befehl nutzen:
lsof -u Benutzername | wc -l

Für den Befehl lsof, der kein Standard unter Debian ist, muss natürlich noch das entsprechende Paket installiert werden.
sudo apt install lsof.

Danach ist es nur deine Aufgabe die verwendeten Ressourcen mit den max Ressourcen des Nutzers abzugleichen.
Wenn sich herausstellen sollte, dass du die Max Limits überschreitest, kannst du diese in /etc/security/limits.conf anpassen. Die Datei beschreibt, wie du die Einstellungen zu konfigurieren hast.
 

Sora_FL

Minecrafter
Registriert
6 September 2020
Beiträge
4
Diamanten
300
Du startest 14 x 4 Gb Ram und hast nur 60. Da bleibt für das System an sich nicht mehr so viel über.

Achso, sorry mein Fehler, das habe ich wohl nicht gut genug beschrieben. Nicht jeder Server startet mit 4GB zugewiesenen Ram.
Mal davon abgesehen das ich es nie schaffe mehr als 5 Server gleichzeitig zu starten (was dann ja selbst bei 4GB pro Server dann 20-25 GB wären und somit noch genug frei wäre).
Hier mal eine kleine Auflistung:
BungeeCorde 1GB
Lobby 1GB
Survival-Server 4GB
Farmwelt 2GB
Minigame1 5x 2GB
Minigame2 5x 2GB
= 28GB
 

Sora_FL

Minecrafter
Registriert
6 September 2020
Beiträge
4
Diamanten
300
Nein. Das kann genauso gut heißen, dass der Benutzer mit dem du deine Startscripts ausführst einfach sein Threadlimit, Processlimit oder ...

vielen dank für diese Ausführliche Antwort, ich werde mir das gleich mal anschauen und durchgehen. Natürlich erstatte ich dann Bericht sobald ich da Ergebnisse habe.
 
Oben