Wie Multi-User-System vor Dauer-Swapping bewahren?
Hallo Liste,
folgende Situation:
Ein Server wird als Rechenknecht für speicherintensive Anwendungen
benutzt. Er hat N Gig RAM + N Gig Swap.
Problem:
Wenn die User in Summe mehr RAM als echten Speicher allokieren, fängt das
System an zu swappen - logisch. Da die Rechenprozesse ständig auf ihren
gesamten Daten herumturnen, kommt das System aus dem Swappen nicht mehr
heraus, d.h. CPU-Last ist fast Null, Swap-IO fast 100% und das System ist
praktisch tot, auch wenn es theoretisch noch lebt. Es ist entsprechend
auch nicht mehr möglich, sich über ssh remote einzuloggen, weil man wegen
der Swapperei auch nach Stunden per ssh keinen Login-Prompt mehr bekommt.
Was ich gerne hätte:
- Entweder sollte gar kein Prozess swappen dürfen, oder
- Prozesse eines bestimmten Typs/Gruppe dürfen in Summe nicht mehr als X
Gig allokieren, oder
- Jemand hat noch eine bessere Idee ...
Was mit dazu bis jetzt eingefallen ist:
- Limits auf User oder Prozeßbasis bringen nichts, da ich a priori nicht
weiß, wie viele User oder Prozesse in Summe existieren werden.
- Den Swap komplett abschalten zusammen mit dem OOM Killer und den
richtigen Overcommit-Settings sollte das Problem eigentlich lösen (stimmt
das?), nur würde ich lieber Swap erlauben, bloß nicht für die Prozesse,
die ständig random access mäßig ihren ganzen allokierten Speicher
durchforsten (weil sie dann dauernd viele Swap Page-Faults provozieren).
- Vielleicht kann man das Problem auch mit cgroups lösen?
- Wenn der Scheduler die Rechenprozesse nicht alle 100ms sondern z.B.
einmal pro Stunde rechnen ließe, würden sich die Prozesse nicht immer
gegenseitig den Speicher _gleichzeitig_ streitig machen. Kann man so etwas
realisieren?
- Gibt es vielleicht ein Batch-Management-System im Archiv, das
konfigurierbar nur soviele Prozesse startet, solange noch genug Speicher
frei ist (man müßte dann den MAX-Speicher für einen Prozeß angeben können).
- Ich hab im Paket-Archiv nach queue, batch, accounting etc. gesucht, aber
die Ergebnisse passten nicht so recht.
Vielleicht hat jemand eine Idee oder ein HOW-TO, wo ich ansetzten kann,
meine Googlei hat mich noch nicht richtig ans Ziel geführt.
System:
#cat /etc/debian_version
5.0.3
Danke und Grüße,
Tilo
Reply to: