Jsem trochu zmatený z některých výsledků, které vidím z ps a zdarma .
Na mém serveru je toto výsledek free -m
[[email protected] ~]# free -m
total used free shared buffers cached
Mem: 2048 2033 14 0 73 1398
-/+ buffers/cache: 561 1486
Swap: 2047 11 2036
Chápu, jak Linux spravuje paměť, je, že bude ukládat využití disku do RAM, takže každý další přístup je rychlejší. Domnívám se, že to naznačují sloupce „cached“. Kromě toho jsou v paměti RAM uloženy různé vyrovnávací paměti, které jsou uvedeny ve sloupci „vyrovnávací paměti“.
Pokud tedy správně rozumím, „skutečné“ použití má být „použitá“ hodnota „-/+ buffery/mezipaměť“ nebo v tomto případě 561.
Takže za předpokladu, že je to všechno správně, část, která mě hodí, jsou výsledky ps aux
.
Jak rozumím ps
výsledkem je, že 6. sloupec (RSS) představuje velikost v kilobajtech, kterou proces používá pro paměť.
Takže když spustím tento příkaz:
[[email protected] ~]# ps aux | awk '{sum+=$6} END {print sum / 1024}'
1475.52
Neměl by být výsledkem sloupec „použito“ „-/+ buffery/mezipaměť“ z free -m
?
Jak tedy mohu správně určit využití paměti procesem v Linuxu? Moje logika je zřejmě chybná.
Přijatá odpověď:
Nestydatě zkopírujte/vložte moji odpověď ze serverfault právě druhý den 🙂
Systém linuxové virtuální paměti není tak jednoduchý. Nemůžete jen sečíst všechna pole RSS a získat nahlášenou hodnotu used
free
. Existuje pro to mnoho důvodů, ale uvedu pár těch největších.
-
Když se proces rozvětví, rodič i podřízený se zobrazí se stejným RSS. Linux však používá kopírování při zápisu, takže oba procesy skutečně využívají stejnou paměť. Pouze když jeden z procesů upraví paměť, bude skutečně duplikována.
To způsobífree
číslo bude menší nežtop
Součet RSS. -
Hodnota RSS nezahrnuje sdílenou paměť. Protože sdílená paměť není vlastněna žádným procesem,
top
nezahrnuje jej do RSS.
To způsobí, žefree
číslo bude větší nežtop
Součet RSS.