GNU/Linux >> Znalost Linux >  >> Linux

Něco sežere veškerou paměť (mám podezření na únik paměti v nějaké aplikaci). Jak zjistit co?

Řešení 1:

Spuštěn top v dávkovém režimu k pravidelnému hlášení velikosti paměti lze použít ke zjištění, kdo používá paměť, když věci jdou na jih. Spouští se sar v dávkovém režimu by měl poskytnout dobrou diagnostiku využití paměti a souvisejících I/O. Spuštěn munin pro sledování systému by vám měl poskytnout graf s dobrými podrobnostmi o tom, k čemu se paměť používá. To může hodně pomoci.

Pro omezení maximální velikosti jádra programů můžete použít limited.conf. Při správném nastavení by to mělo zabít všechny programy, které unikají paměti. Toto funguje s modulem pam_limits. Limity lze také nastavit pomocí ulimits příkaz.

Používáte několik programů, které by mohly využívat velké množství paměti. Některé věci, na které se můžete podívat, zahrnují.

  • Špatně naprogramované aplikace běžící pod apache2 může dojít k úniku paměti. Když k tomu dojde, měli byste vidět zvětšení velikosti paměti. Apache2 můžete vyladit tak, aby po určitém počtu použití recykloval děti nastavením MaxRequestsPerChild na 100 nebo tak. Pokud se tím problém vyřeší, musíte vyřešit únik. Nejdřív bych se podíval na tohle.
  • MySQL se může pokusit načíst data do paměti. Máte-li v paměti mnoho dat, může to způsobit určité otřesy, ale nemělo by to být tak dramatické, jak vidíte.
  • Pokud máte velký tmpfs souborový systém připojen, pak může dojít k úniku paměti, pokud nejsou soubory při použití smazány. Problémem mohou být také velké soubory s dlouhou životností.
  • Pokud se problém vyskytne zhruba ve stejnou denní dobu, možná máte naplánovaný program, kterému uniká paměť.
  • Pokud máte program, který alokuje sdílenou paměť, ale neuvolní ji před ukončením, dojde k relativně neviditelnému úniku paměti. Pokud je sdílená paměť uzamčena v paměti, může to vynutit výměnu. Množství dostupné sdílené paměti je obvykle relativně omezené.
  • U balíčku liquidsoap+icecast by mohly nastat problémy s vyrovnávací pamětí, které využívají paměť. Tuto kombinaci jsem nepoužil, takže si nejsem jistý, jak by to vypadalo.

Normální využití paměti:Volná paměť není něco, co byste chtěli hodně. Pokud je váš systém spuštěný dlouhou dobu a má hodně volné paměti, je něco špatně. Pokaždé, když čtete nebo zapisujete soubor, bloky se přesunou do vyrovnávací paměti. To sníží vaši volnou paměť a je to dobrá věc. Systém si ponechá dostatek volného místa pro spuštění několika programů, aniž by hledal jinde paměť. Protože mnoho programů běží rychle, jejich paměť se po zastavení vrátí do volné oblasti.

Když čtete soubor, který je ve vyrovnávací paměti, není vyžadován přístup na disk a čtení je vyřešeno z mezipaměti. Zápisy používají podobný mechanismus. Pokud váš systém potřebuje paměť, je mezipaměť mezipaměti jedním z prvních míst, která se používá. Většinu vyrovnávacích pamětí lze uvolnit okamžitě.

Pokud máte nevracení paměti, uvidíte, jak se volná paměť a vyrovnávací paměti začnou zmenšovat. Stále to není vážný problém, protože uniklá paměť by měla být nakonec přesunuta do odkládacího prostoru. Váš systém bude stále fungovat dobře, dokud nezaplníte odkládací prostor a nevyčerpáte zbývající volné místo do té míry, že programy nelze spustit. Je typické, že lze použít malé množství odkládacího prostoru.

Řešení 2:

Tento příkaz můžete použít k zobrazení 10 nejlepších aplikací týkajících se využití paměti RAM:

ps -A --sort -rss -o comm,pmem | head -n 11

Někdy vám tento příkaz pomůže, pokud bylo vygenerováno mnoho dílčích procesů:

ps auxf

Tímto způsobem můžete vidět, které procesy k sobě patří.

Řešení 3:

Z hlediska aplikací tuto paměť ve skutečnosti nic nevyužívá.

Musíte odečíst hodnotu 'cached', která představuje mezipaměť stránky, abyste získali lepší představu o tom, jaké je vaše skutečné využití paměti z hlediska využití programu.

V zásadě jde o dobrou správu paměti a to je v ideálním případě to, co chcete.

Více informací naleznete zde:http://www.linuxatemyram.com/


Linux
  1. Jak zaplnit 90 % volné paměti?

  2. Jak Idiomatické unixové programy detekují, pod jakou předponou jsou nainstalovány?

  3. Jak vypočítat využití paměti v Linuxu pomocí sar, ps a zdarma

  1. Jak zaznamenat spotřebu paměti v Linuxu?

  2. Linux:zjistěte, jaký proces využívá všechnu RAM?

  3. Jak odstranit všechny soubory v adresáři kromě některých?

  1. Jak získat % využití paměti pomocí vmstat?

  2. Jak zjistím, co zabírá veškerý prostor na mém / oddílu?

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