Tento komentář píši po 17 dnech bezproblémového provozu dotčených VM serverů.
Co popsaný problém způsobuje:
1. Diskové pole je na hypervisoru Proxmox provozováno pomocí souborového systému ZFS v konfiguraci 2 disků v zrcadle.
A to je první problém, ve výchozím stavu si tento souborový systém automaticky sebere půlku fyzické paměti počítače a je mu jedno, zda je to 1GB, nebo 2000GB.
Co s tím? Je potřeba se dívat na reálnou spotřebu RAM počítače a v tomto případě htop, který běžně používám lže a automaticky do volné paměti zahrnuje i RAM které je ve skutečnosti používaná jako ZFS cache.
Jak reálnou spotřebu RAM tedy zobrazím? Tímto příkazem:
free -h
Omezil jsem tedy v mém případě konzumaci RAM pro potřeby ZFS cache na max 1,5GB:
echo 'options zfs zfs_arc_max="2684354560"' >> /etc/modprobe.d/zfs.conf
a min. na 1GB:
echo 'options zfs zfs_arc_min="1073741824"' >> /etc/modprobe.d/zfs.conf
Následně je potřeba aktualizovat nastavení zavaděče:
update-initramfs -u
A pokud jako já používáte EFI, tak ještě:
pve-efiboot-tool refresh
Pak je potřeba hypervisor restartovat.
Níže uvedený příkaz ukáže statistiky ARC cache pro ZFS:
arc_summary
A aktuální použití RAM ARC zjistíte pomocí:
arcstat
2. Druhou částí problému je to, že proces, který se stará o řešení (zabíjení) procesů o kterých si myslí, že se vymknul kontrole, nefunguje dostatečně agresivně, a i když má srv. k dispozici povolený několika GB SWAP (v mém případě 32GB), rozhodne se raději proces zmrazit a SWAP nepoužít. Ono zmrazení procesu je to, co mi způsobovalo zamrzání virtuálů na daném hypervisoru.
Pomocí příkazu:
echo 3 > /proc/sys/vm/drop_caches
Lze "manuálně", např. pomocí crone donutit systém, aby po sobě uklízel cache ZFS, protože samotnému procesu se do toho moc nechce.
Tímto způsobem lze systém nakonec u stabilizovat, ale popravě, já jsem se na to nakonec vykašlal. Nainstaloval jsem na daný server jiný hypervisor, konkrétně VMware ESXi který je pro mé účely zdarma a od té doby nemusím nic řešit, vše je naprosto stabilní a nemám ani v náznaku problém s RAMkou i když využívám více jádrové VM.
Jednotlivé VM jsem znovu neinstaloval, pouze jsem jejich disky zkonvertoval do formátu VMware a překopíroval je přes externí USB disk do nového umístění...
Tzn., problém nebyl ve VM který vždy v noci zamrzl, ale byl v hostitelském OS, tedy v hypervisoru.