GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu měřit skutečné využití paměti aplikací nebo procesem?

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>

Linux
  1. Jak zobrazit nejlepší procesy seřazené podle skutečného využití paměti?

  2. Jak uvolnit obrovské stránky z havarované aplikace

  3. Jak mohu znát absolutní cestu běžícího procesu?

  1. Jak mohu zobrazit využití paměti každého procesu, když udělám 'ps -ef'?

  2. Jak sledovat využití paměti vyhrazené jádru?

  3. Jak mohu nastavit afinitu procesoru k procesu v systému Linux?

  1. Jak mohu rezervovat blok paměti z jádra Linuxu?

  2. Jak mohu skrýt výstup shellové aplikace v Linuxu?

  3. Jak se v Linuxu hlásí využití paměti?