[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: