Was macht VServer wenn RAM voll?

  • Da ich schon einmal hatte, dass auf meinem VServer ein paar Prozesse auf einmal nicht mehr liefen, würde mich schon interessieren was eigentlich passiert wenn der VServer zu viel RAM braucht.


    Mal angenommen ich würde jetzt auf einem VServer viele ressourcenhungrige Prozesse ausführen, und der belegte RAM überschreitet dauerhaft meine garantierten Ressourcen. Wenn jetzt ein "Nachbar"-Node aber ebenfalls mal was von dem shared memory abhaben will, was passiert dann mit meinem VServer?
    Werden da einfach random Prozesse gekillt, oder bekommt der Kernel irgendwie gesagt dass er jetzt weniger RAM zur Verfügung hat?


    Es geht darum dass ich eventuell einen Gameserver auf meinem VServer laufen lassen will, der ziemlich sicher den garantieren RAM, nicht aber den dynamischen RAM überschreitet. Es würde mich nicht stören wenn der im Ernstfall dann anfangen würde zu swappen - hauptsache es wird nicht irgendwas gekillt oder gar einfach memory gelöscht.


    Wäre schön wenn mich jemand darüber aufklären könnte :)

  • Genauer habe ich das noch nie hinterfragt, im Ubuntuusers Wiki steht dazu folgendes:


    Quote

    Hat man allerdings keinen Swap Space und das RAM läuft voll, so beendet der Linux Kernel nach eigenem Ermessen Programme, um RAM frei zu machen. Dies hat in der Regel immer Datenverlust zur Folge. Um genau dies zu verhindern, legt Ubuntu (so wie alle anderen Distributionen) bei der Installation standardmäßig eine Swap-Partition an.


    Meine Vermutung geht eher in diese Richtung: Sobald ein Programm (= irgendeines) weitere Speicherbereiche anfordert, wird die Anforderung vom Kernel zurückgewiesen => Programm stürzt ab, da es logischerweise nicht mehr weiter "rechnen" kann. Oder einfach ausgedrückt, das Programm wird vom Kernel gekillt, kommt letzten Endes auf das selbe Ergebnis.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ok, das würde aber auch bedeuten dass er swappt wenn noch swap frei ist - worauf ich bei meinem Server dann eigentlich schon achte. Wäre praktisch wenn es nach diesem Prinzip gehen würde.


    Kann das jemand sicher bestätigen?

  • Jein, weil du nicht sicher sein kannst, wie viel Swap (dynamischer Ram) dir zur Verfügung steht. Du solltest deine Systeme immer so wählen und konfigurieren, dass sie mit dem garantiertem (echten) Ram auskommen und maximal bei kurzfristigen Engpässen swappen müssen. Alles andere ist - meiner Meinung nach - Schwachsinn. Unabhängig davon ist Swap (bei den neueren vServern über SSD realisiert) immer langsamer als echter Ram und dadurch gerade für Gameserver usw. absolut ungeeignet, wenn man plant ihn immer auszulasten.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Vielleicht hab ich mich etwas falsch ausgedrückt, aber ich hatte genau das vor was du im letzten Post beschreibst.
    Der Swap sollte nur im Notfall bereitstehen, damit nicht wichtige Prozesse ganz gekillt werden. Wenn das Spiel dann laggt und ich den Gameserver runterfahren muss ist nicht schlimm, ich verdiene ja kein Geld damit ;)

  • Quote from Gigadoc 2;33671

    was eigentlich passiert wenn der VServer zu viel RAM braucht.


    Nichts oder es läuft der OOM Killer los. Experten lassen sich natürlich bevorzugt den ssh-Daemon killen ;)


    Quote from Gigadoc 2;33671

    Wenn jetzt ein "Nachbar"-Node aber ebenfalls mal was von dem shared memory abhaben will, was passiert dann mit meinem VServer?


    Du teilst dir mit deinen Nachbarn keinen Speicher. Ihr liegt höchstens auf dem gleichem Speicherriegel. Hierzu kann aber nur netcup selbst eine verbindliche Aussage treffen. Es gibt genug Billighoster, die vServer überbuchen.


    Quote from Gigadoc 2;33671

    Werden da einfach random Prozesse gekillt, oder bekommt der Kernel irgendwie gesagt dass er jetzt weniger RAM zur Verfügung hat?


    Die Anwendung bekommt keinen neuen Speicher mehr zugewiesen. Stell dir das so vor, als würdest du versuchen eine nicht erreichbare Webseite zu erreichen. Hierbei stürzt weder dein Browser, noch dein Netzwerk, etc ab.


    Quote from killerbees19;33673

    Meine Vermutung geht eher in diese Richtung: Sobald ein Programm (= irgendeines) weitere Speicherbereiche anfordert, wird die Anforderung vom Kernel zurückgewiesen => Programm stürzt ab


    Wieso sollte ein Programm einfach so abstürzen? Das ist Quatsch, siehe z.B. http://lwn.net/Articles/318294/


    Quote from Gigadoc 2;33678

    Der Swap sollte nur im Notfall bereitstehen, damit nicht wichtige Prozesse ganz gekillt werden.


    Genau dafür ist swap auch gedacht wenn man ein System richtig plant. Siehe dazu den Parameter swappiness. Der Kernel entscheidet wenig genutzte Speicherbereiche im Gegenzug für mehr Cache für aktive Programme auszubalancieren (vereinfacht gesagt). Mehr dazu unter http://kerneltrap.org/node/3000

    "Security is like an onion - the more you dig in the more you want to cry"

  • Bei den vServern hier sollte es so sein, da der Swap nicht nur von dir verwendet wird.
    Bei jedem anderen Linux System kann es vollkommen anders sein, je nachdem was eingestellt wurde.


    Siehe auch der letzte Link von vmk.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Quote from vmk;34638

    Wieso sollte ein Programm einfach so abstürzen? Das ist Quatsch, siehe z.B. http://lwn.net/Articles/318294/

    theoretisch stimmt das, praktisch fängt viele Software den Error-Code des malloc() nicht ab und stürzt dann eben ab, wenn es den nicht allokierten Speicherbereich nutzen möchte - also habt ihr eigentlich beide Recht ;)

  • Zu beachten ist, dass sich die meisten Erklärungen hier auf ein normales Linux-System beziehen, nicht auf das von netcup eingesetzte Virtualisierungs-Framework Linux-vServer. Eine gute Erklärung dazu findet sich im Projekt-Wiki: http://wiki.linux-vserver.org/Memory_Limits


    Eine kurze Erklärung anhand meines vServer Neptun: Ich habe insgesamt 2048 MB Speicher zur Verfügung, von denen mir 1024 als RAM und 1024 als Swap angezeigt werden.


    Wenn ich nun mehr als die 1024 MB die als RAM angezeigt werden verbrauche wird meine VM intern als "Zuviel RAM-Verbrauch" markiert. Sollte die Node auf der mein vServer liegt nun plötzlich zu wenig freien Speicher haben und den OOM-Killer starten wird bevorzugt eines von meinen Programmen gekillt. Wie viel "Speicher-Reserve" jede Node hat weiß nur Netcup, daher kann man auch nicht wissen wie oft der OOM-Killer wohl auf Node-Ebene läuft.


    Wenn der OOM-Killer mich auf Node-Ebene nicht belästigt kann ich weiterhin fröhlich Speicher anfordern, bis zur zweiten magischen Grenze von 2048 MB. Wird diese überschritten schlagen Speicheranforderungen logischerweise fehl. Sollte durch ungünstige Umstände (wie Overcommit) mein Gesamtspeicherverbrauch über 2048 MB steigen wird der OOM-Killer speziell für meinen vServer gestartet -> Er hat es nur auf die Prozesse meines vServer abgesehen.


    Um die ursprüngliche Frage zu beantworten: Solange Du mit Deiner Speichernutzung unter deinem garantiertem Wert bleibst (als Memory angezeigt z.B. in top) wird Deinen Anwendungen nie was passieren. Wenn Du mehr benötigst (als Swap angezeigt) ist es möglich dass ein beliebiger Prozess innerhalb Deines vServers gekillt wird, vor allem wenn auf Deiner Hardware-Node noch andere vServer mit hoher Speichernutzung liegen.

  • Quote from 20365;34678

    Eine kurze Erklärung anhand meines vServer Neptun: Ich habe insgesamt 2048 MB Speicher zur Verfügung, von denen mir 1024 als RAM und 1024 als Swap angezeigt werden.


    Wenn ich nun mehr als die 1024 MB die als RAM angezeigt werden verbrauche wird meine VM intern als "Zuviel RAM-Verbrauch" markiert. Sollte die Node auf der mein vServer liegt nun plötzlich zu wenig freien Speicher haben[...]


    Wenn ich mich nicht ganz falsche erinnere, so habe ich hier bei netcup 1GB RAM (in Riegelform) und 1GB RAM (in SSDform) welcher mir jeweils exklusiv zusteht. Annahme: Ich verbrauche 1800MB. Wieso sollte der oomkiller plötzlich aktiv werden? Das Limit ist doch hart bei 2048MB.

    "Security is like an onion - the more you dig in the more you want to cry"

  • Quote from vmk;34682

    Wenn ich mich nicht ganz falsche erinnere, so habe ich hier bei netcup 1GB RAM (in Riegelform) und 1GB RAM (in SSDform) welcher mir jeweils exklusiv zusteht. Annahme: Ich verbrauche 1800MB. Wieso sollte der oomkiller plötzlich aktiv werden? Das Limit ist doch hart bei 2048MB.


    Ich habe mich hier direkt auf die Dokumentation von Linux-vServer bezogen, nicht auf die netcup-Werbung. Die Möglichkeit dass netcup das komplette Memory-Management von Linux-vServer neu geschrieben hat halte ich jedoch für eher unwahrscheinlich. Ich nehme an die "Flexi-SSD" bezieht sich darauf, dass die Node SSDs für Swap verwendet.