Re: podivné problémy s alokací paměti / CentOS 6.2 na VPS

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Čtvrtek Březen 1 11:30:05 CET 2012


On Wed, 29 Feb 2012, Tomas Vondra wrote:

> Dnes večer to opět vyhodilo pár OOM hlášek - nejdříve mezi 17:22 a
> 17:30, pak kolem 19:15. Přitom podle "sar -r" byla situace takováhle:

U první události se nic poznat nedá, kromě toho, že to asi celé chcípnulo.

U druhé události je vidět, že se tam něco neobvyklého dělo (vyhodil jsem 
sloupec %commit, který je podle toho, co píšete, stejně spíš zavádějící)

18:00:01    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit
19:00:01       187992    314736     62,61     17068    138264    358120
19:10:01       172836    329892     65,62     18176    158256    354640
19:20:01        74268    428460     85,23      5912    261548    364168
19:30:02       275624    227104     45,17      6152     66876    362896

Mezi 19:10 a 19:20 musela proběhnout nějaká dost značná aktivita, která 
způsobila nárůst kbcached a mezi 19:20 a 19:30 zase něco jiného kbcached 
srazilo dolů.

Změnu mezi 19:20 a 19:30 by mohlo být možno vysvětlit tak, že něco 
alokovalo cca 200 MB RAM a vzápětí skončilo a zase jí uvolnilo.

Změna mezi 19:10 a 19:20 je méně jasná. Je ale evidentní, že se to muselo
v určitém okamžiku ocitnout v situaci, kdy bylo volné paměti hodně málo, 
protože měl potřebu redukovat buffery.

Problém saru v takových situacích je nedostatečné rozlišení a to jak
z hlediska času tak z hlediska rozlišení jednotlivých procesů. Pomoci 
může process accounting, ale ten má zase slepou skvrnu u dlouho běžících 
procesů. Možná by se něco lepšího dalo postavit nad taskstats, nevím, 
jestli už někdo něco takového udělal.

> Jediné co mne napadá je že se do toho commit limitu možná nějak divně 
> počítá paměť sdílená více procesy (např. shared segmenty ...).

Možné je leccos, ale toto asi není správné vysvětlení.

A propos, ještě jedna věc, kterou jsem si předtím úplně neuvědomil a
ukryl jí za frázi "rozumná rezerva":

Veškerá práce se soubory, což zahrnuje i kód spuštěných programů (!) spadá 
tedy do kategorií buffers a cached a musí se vejít do prostoru, který
v RAM zůstane po odečtení commited z jedné strany a toho, co spotřebuje 
jádro pro vlastní potřeby z druhé strany.

Pokud nastavíte overcommit_ratio tak, že pro kbcached může zůstat méně než 
je velikost adekvátní části pracovní množiny spuštěných procesů, tak si 
koledujete o brutální thrashing. (Nepopisujete, k čemu došlo mezi 17:20
a 17:30, ale moc bych se nedivil, kdyby chcípnul právě takto.)

Upřímně řečeno si myslím, že nikdo nikdy neočekával, že 
overcommit_memory=2 bude někdo někdy chtít použít bez swapu.

Také jsem asi ze spotřeby jádra v původním popisu vynechal VmallocUsed 
(ono se to bere z virtuální paměti, ale bez swapu je to fakticky RAM). A 
asi by se tam měla zohlednit i hodnota min_free_kbytes. Ono je to obojí 
obvykle jen pár mega, ale pokud necháváte rezervu o velikosti 10 MB, tak 
už to může být chyba dost významná.

-- 
Pavel Kankovsky aka Peak                          / Jeremiah 9:21        \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /


Další informace o konferenci Linux