Existují případy, kdy je zajímavý pohled na neaktivní paměť, vysoký poměr aktivní a neaktivní paměti může například indikovat tlak na paměť, ale tento stav je obvykle doprovázen stránkováním/swapováním, které je snazší pochopit a pozorovat. Soubor /proc/kpageflags
obsahuje 64bitovou bitmapu pro každou stránku fyzické paměti, souhrn můžete získat pomocí page-types
který může být součástí vašeho jádra.
Vaše chápání aktivní a neaktivní je však nesprávné
- aktivní paměť jsou stránky, které byly otevřeny „nedávno“
- neaktivní paměť jsou stránky, které nebyly navštíveny „nedávno“
„nedávno“ není absolutní měřítko času, ale závisí také na aktivitě a tlaku paměti (některé technické podrobnosti si můžete přečíst v bezplatné knize Porozumění Linux Virtual Memory Manager , zde je relevantní kapitola 10) nebo dokumentace jádra (pagemap.txt).
Každý seznam je uložen jako LRU (více či méně). Neaktivní paměťové stránky jsou dobrými kandidáty pro zápis do odkládacího souboru, a to buď preventivně (než jsou vyžadovány stránky volné paměti), nebo když volná paměť klesne pod nastavený limit a volné stránky jsou (bezprostředně) potřeba.
Buď příznak se vztahuje na stránky přidělené běžícím procesům, s výjimkou perzistentní nebo sdílené paměti se všechna paměť uvolní při ukončení procesu, jinak by to bylo považováno za chybu.
Toto nízkoúrovňové označování stránky nepotřebuje znát PID (a paměťová stránka může mít v každém případě namapováno více než jedno PID), takže informace potřebné k poskytnutí vámi požadovaných dat nejsou na jednom místě.
Chcete-li to provést na základě jednotlivých procesů, musíte extrahovat rozsahy virtuálních adres z /prod/PID/maps
, převést na PFN (fyzickou stránku) s /proc/PID/pagemap
a indexujte do /proc/kpageflags
. Vše je popsáno v pagemap.txt
, a zabere asi 60-80 řádků C. Pokud neřešíte problémy se systémem VM, čísla nejsou příliš zajímavá. Jedna věc, kterou byste mohli udělat, je počítat neaktivní a swapem zálohované stránky na proces, tato čísla by měla označovat procesy, které mají nízkou velikost RSS (rezidentní) ve srovnání s VSZ (celková velikost VM). Další věcí může být odvodit únik paměti, ale pro tento úkol existují lepší nástroje.
Žádný takový nástroj neexistuje, protože je pro jakýkoli externí program zcela zbytečný.
Jediná část systému, která to potřebuje vědět, je obslužná rutina paměti jádra, která ji použije k tomu, aby věděla, co má stránkovat (swapovat), pokud mu dojde dostupná paměť.
Jediný související případ, který by mohl způsobit nějaké starosti, je, když se váš swap téměř zaplní. Pokud se to někdy stane, stačí to zvýšit.
Nikdy jsem neviděl skutečné problémy, které by zahrnovaly vyšetřování neaktivní paměti.