Angeforderten Speicher für individuelle Prozesse bestimmen

spirit

New Member
Hallo,

ich wüsste gerne eine Methode um den von einem Prozess angeforderten RAM zu bestimmen. Wenn man das wüsste könnte man gezielt vorgehen und sein System optimieren.

Hintergrund ist die Optimierung meines vServers, bei diesem stoße ich trotz wenig laufender Prozesse und geringer RAM-Belegung ständig an die Grenze von privvmpages (für alle, die nicht wissen, wovon ich rede : es geht um die Ausgabe von cat /proc/user_beancounters, diese Datei exisitert nur auf vServern).

Details zum Problem:

Irgendwelche Prozesse versuchen offensichtlich erstmal sehr großspurig Speicher anzufordern, den sie dann aber eh nicht benutzen (privvmpages am Limit, vmguarpages und oomguarpages hab ich sehr viel über und komme nie in die Nähe des Limits). Virtuozzo schiebt dann den Riegel vor und es geht nix mehr.

Laut OpenVZ-Wiki gibt privvmpages ja nur die Menge an Speicher an, welche meine Prozesse zu reservieren (malloc()) versuchen und nicht die, die tatsächlich verbraucht wird. Diese wird laut Doku durch vmguarpages und oomguarpages kontrolliert. Beide Werte liegen bei mir sehr weit unter dem Limit und machen keinen Ärger:

Den wirklich verbrauchten RAM zeigen mir ps und top an, das ist klar.

Meine Frage bezog sich aber auf den Wert privvmpages - also den angeforderten Speicher.

Wie kann man diesen Wert (für die einzelnen Prozesse) feststellen?

Hat jemand Vorschläge dazu?

PS: Bitte diesen Thread nicht benutzen, um auf irgendwelche Firmen/Leute/sonstwas zu schimpfen.
@Mods : Falls es jemand nicht lassen kann bitte die Posts der Leute löschen aber nicht den Thread sperren, er hat's echt nicht verdient. Hatte die Frage schonmal so ähnlich gestellt, aber der Thread hat's wegen Kindereien anderer Leute nicht überlebt.
 
Den wirklich verbrauchten RAM zeigen mir ps und top an, das ist klar.

Meine Frage bezog sich aber auf den Wert privvmpages - also den angeforderten Speicher.

Wie kann man diesen Wert (für die einzelnen Prozesse) feststellen?

.

Mit der entsprechenden Option zeigt ps auch den angeforderten Speicher an.
Üblicherweise ist das die zusätzliche Option l. (Bsp: ps axl)
Dann wird zusätzlich zum RSS (Resident Set Size, also tatsächlich verwendeter Speicher) auch VSZ (Virtual Memory Size, also angeforderter Speicher) angezeigt.
 
Vielen Dank!

AUf den ersten Blick fällt auf dass mein MySQL recht gierig gewesen ist dafür, dass er (fast) nix zu tun hat.
Jetzt klapper ich die Prozesse mal ab...
 
Mit pmap bekommst Du ebenso eine Information über die tatsächliche Speicheraufteilung des Prozesse, inklusive der geteilten (shared) Bereiche, die unter ps nicht separat ausgewiesen sondern über die dort angezeigten Prozesse mehrfach berechnet werden.

LinuxSpeichermanagement - debianforum.de Wiki

Das von Dir angestrebte Ziel der Speicherbedarfsoptimierung bewirkt, dass der Failcounter unter privvmpages nicht hochzählt und "gierige" Prozesse nicht beim Allozieren abgewürgt werden und damit u.U. den Dienst komplett verweigern. Die Performance insgesamt wird aber so nicht besser, denn wenn der Key-Buffer im RAM kleiner ist, dann wird eben auf der Platte gesucht. Sorry, wenn das wie Klug******erei klingt, ich wollt's nur mal erwähnt haben.

Beide Werte liegen bei mir sehr weit unter dem Limit und machen keinen Ärger.

Bezüglich der Begrifflichkeiten:

In der OpenVZ-Doku steht geschrieben, dass oomguarpages für den garantierten RAM+Swap-Speicher und vmguarpages für den garantierten RAM-Speicher steht. Die barrier-Werte sind Garantien, die auch im Extremfall definitiv eingehalten werden können. Daher werden sie in der Praxis eher niedrig angesetzt sein (over-committing). Die limit-Werte sind derzeit Phantasiewerte ohne Bedeutung, und lediglich maximal eingestellt ("The meaning of the limit for the oomguarpages parameter is unspecified in the current version." / "The meaning of the limit for the vmguarpages parameter is unspecified in the current version and should be set to the maximal allowed value (MAX_ULONG).")

Einzig entscheidend sind also die privvmpages ("Starting from the barrier of privvmpages, normal priority allocations and, starting from the limit of privvmpages, all memory allocations made by the applications fail."). Siehe auch die Verweise hierauf in den Abschnitten zu oomguarpages und vmguarpages.
 
Vielen Dank auch dir für die Infos.

Dein Kommentar zu den Effekten meines Tuns klingt keinesfalls nach Klugscheisserei. Genau das, was du da beschreibst, ist mein Ziel. Ich will mit der Aktion nicht mehr Performance, sondern ich möchte das Abstürzen meiner Prozesse mit häßlichen Fehlermeldungen aufgrund fehlenden Speichers verhindern.

Ich benutze den Server allein, ab und zu zieht mal wer was per ftp, ich checke Mails oder es sieht jemand die Webseite an - ob der Server das letzte bisschen Performance aus den Diensten rausholt ist komplett irrelevant, nur laufen müssen sie eben. Und in den Standardeinstellungen sind sie für erheblich mehr Last konfiguriert, als sie bei mir aushalten müssen. Also wird ihnen jetzt RAM geklaut. :p

Ich werde mich gleich nochmal etwas länger mit Virtuozzo auseinandersetzen, glaub ich. Das Wiki macht auch echt 'nen guten Eindruck.
 
Last edited by a moderator:
Back
Top