S ps
nebo podobných nástrojů získáte pouze množství paměťových stránek přidělených tímto procesem. Toto číslo je správné, ale:
-
neodráží skutečné množství paměti využívané aplikací, pouze množství paměti vyhrazené pro ni
-
může být zavádějící, pokud jsou stránky sdíleny, například několika vlákny nebo pomocí dynamicky propojených knihoven
Pokud opravdu chcete vědět, jaké množství paměti vaše aplikace skutečně využívá, musíte ji spustit v profilovači. Například Valgrind vám může poskytnout informace o množství použité paměti a co je důležitější, o možných únikech paměti ve vašem programu. Nástroj pro profilování haldy Valgrind se nazývá 'massif':
Massif je profilovač haldy. Provádí podrobné profilování haldy pořizováním pravidelných snímků haldy programu. Vytváří graf zobrazující využití haldy v průběhu času, včetně informací o tom, které části programu jsou zodpovědné za nejvíce alokací paměti. Graf je doplněn textovým nebo HTML souborem, který obsahuje více informací pro určení, kde je alokováno nejvíce paměti. Massif spouští programy asi 20x pomaleji než normálně.
Jak je vysvětleno v dokumentaci Valgrind, musíte program spustit prostřednictvím Valgrind:
valgrind --tool=massif <executable> <arguments>
Massif zapisuje výpis snímků využití paměti (např. massif.out.12345
). Ty poskytují (1) časovou osu využití paměti, (2) pro každý snímek záznam o tom, kde byla ve vašem programu alokována paměť. Skvělým grafickým nástrojem pro analýzu těchto souborů je massif-visualizer. Ale našel jsem ms_print
, jednoduchý textový nástroj dodávaný s Valgrind, který je již nyní velkým pomocníkem.
Chcete-li najít úniky paměti, použijte (výchozí) memcheck
nástroj valgrind.
Zkuste příkaz pmap:
sudo pmap -x <process pid>