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

Tomas Vondra tv na fuzzy.cz
Úterý Únor 28 20:08:25 CET 2012


On 28.2.2012 18:13, Pavel Kankovsky wrote:
> On Sun, 26 Feb 2012, Tomas Vondra wrote:
> 
>> Po změně v sysctl.conf jsem udělal "sysctl -p" a z výstupu také pochází
>> ty uvedené hodnoty. Takže ano, jsou to aktuální hodnoty.
> 
> Občas se vyplatí zkontrolovat i takové na první pohled zřejmé věci,
> jako např. to, že když někde nastavím nějakou hodnotu, tak zda tam zůstane.

To jsem udělal (díval jsem se i do /proc/sys/vm na odpovídající
hodnoty). Nicméně když jsem to teď chtěl pro pořádek ověřit, zjistil
jsem že jsem v rámci řešení ty hodnoty v /etc/sysctl.conf zakomentoval.

A když jsem je odkomentoval a zavolal jsem "sysctl -p" tak to opět
začalo padat kvůli OOM. Což mne dovedlo k poznání uvedenému níže.

>> Před chvílí jsem zkoumáním logů zjistil že podezřele se to začalo chovat
>> cca před týdnem, když jsem VPS restartoval po upgrade kernelu.
> 
> Už jsem viděl, že v CentOSu 6 při aktualizaci jádra nějak strašil.
> Konkrétně se to projevovalo tak, že se na jednom stroji kdovíproč
> nespustil depmod a initramfs byl nějaký zkriplený. Reinstalace
> to obvykle opravila. Najít příčinu se (zatím) nepodařilo, protože to byl
> takový heisenbug a jakmile jsme se pokusili to nějak diagnostikovat, tak
> to přestalo.
>
> Ale vůbec nechápu, jak by nějaký zádrhel při instalaci mohl mít za
> následek popsané potíže s nedostatkem paměti.

Chtěl bych vám poděkovat za navedení na správnou stopu - ukázalo se že
jsem dosud žil v bludu ohledně fungování parametrů vm.overcommit_*

Totiž pokud se nastaví "vm.overcommit_memory = 2" tak se maximum
použitelné paměti nastaví na

   swap + (RAM * vm.overcommit_ratio / 100)

přičemž výchozí hodnota overcommit_ratio je 50. Tj. bez swapu se to
omezí na 50% RAM (což je cca ta hranice kde to začalo dělat paseku).

Současně to vysvětluje proč to po přidání swapu začalo fungovat, ačkoliv
se swap vůbec nepoužíval - pouze se tím zvýšil limit RAM.

Aktuálně jsem tam nastavil

  vm.overcommit_memory = 2
  vm.overcommit_ratio = 100
  vm.swappiness = 0

od čehož si slibuji že bude povoleno alokovat paměť odpovídající 100%
fyzické RAM. Swap tam není, takže swappiness je tam spíš pro okrasu.

Je mi jasné že takhle to může spadnout na OOM pokud bude potřeba víc
paměti než je fyzická RAM, ale to je žádoucí. Je to VPS kde se výkon I/O
dost mění - pokud dojde k OOM tak přidáme RAM. Všechny služby jsou ale
nastaveny tak aby k tomu nemohlo dojít.

Díky, opět jsem o něco moudřejší!

s pozdravem
Tomáš Vondra


Další informace o konferenci Linux