Řeším, jak zjistit využití paměti jednotlivými procesy, a to pouze reálné paměti (nikoli virtuální či odswapované).
použil jsem
> ps -eo pmem
ale když jsem sečetl všechna procenta, dostal jsem cca 150%, přičemž swap započítán není. pmem by neměl zobrazovat virtuální paměť.
Hodnota je vypočítávána na základě RSS, zkusil jsem tedy
> ps -eo rss
sečetl kilobyte a vypočítal na základě celkové fyzické paměti tatáž procenta, jaká vrací ps -eo pmem.
Ať zkouším cokoli, nedokážu získat hodnotu pod 100%. Už jsem i sčítal rss v /proc, násobil čtyřmi, ale vždy došel k témuž číslu.
Zdá se, že přes rss cesta nevede. A kudy vede?
Budu vděčný za jákékoli řešení
díky
Tradičně odpovím, že to nejde, aby pak mohl někdo odpovědět, že to jde...
Tedy: z normálně dostupných údajů v /proc to nejde. První problém je, komu počítat sdílenout paměť, ale to si nějak definuješ.
Ovšem de facto se dovídáš jen sdílitelnou, nikoli sdílenou paměť. Sdílitelná paměť je povětšinou mmapovaný kód. Po prolezení /proc/NNN/maps bys asi dokázal zhruba zrekonstruovat, co opravdu sdílí co s čím.
I když to spočítáš, stále nevím jak zjistit, které části sdílené paměti jsou odswapované.
A protože ukazatel sežrané fyzické paměťi pro změnu nerozlišuje, jestli je soukromá nebo sdílená, myslím si, že se z toho vymotat nelze.
22.11.2004 18:20
Jan Molič
RozbalitRozbalit vše
Re: Zjištění reálného využití paměti procesem (ps -eo pmem?)
Hmm.. tak to je docela problém - udělal jsem skript, který sčítá celé větve procesů (podle podobného jména) a pokud vyhodnotí, že zabírají příliš mnoho v paměti, tak celou větev killne.. jenže je to celé závislé na těch procentech.
Snažil jsem se k tomu přistoupit tak, že vyrobím 100% z toho, co leze z ps, jenže ono je to tak proměnlivé, že se na to nedá spoléhat (v jednu chvíli je součet 80%, vzápětí 150%, přičemž free vrací stále podobné hodnoty)
No nic, zkusím ještě potrápit ten /proc.. jenže tam vidím další problém - soubory se mění v průběhu načítání.
Ale díky za odpověď!
22.11.2004 18:45
Jan Molič
RozbalitRozbalit vše
Re: Zjištění reálného využití paměti procesem (ps -eo pmem?)
zatím mne napadlo toto řešení:
1. zjistím celkové využití paměti pomocí free,
2. sečtu všechna pmem, která vrací ps,
3. upravím výstup z ps podle celkového využití
Zapomněl jsem napsat, že to celé komplikují thready ;-) I když při tvém přístupu možná jen asi 20 KB/thread, které se nikde neukážou.
Takhle dostaneš jakýsi odhad -- bude znevýhodňovat (připisovat jim víc) programy, které běží v hodněkrát, a/nebo hodně sdílejí. Myslím, že když spustím tři kopie Gimpu, tak těch 14 MB SHR, které to ukazuje, mohu považovat za opravdu sdílené (i když pořád nevím, zda jsou ve fyzické paměti, nebo odswapované).