it-swarm-eu.dev

Byl dosažen limit pro sledování hodin jádra

V současné době čelím problému v linuxové krabici, kde jako root mám příkazy, které vracejí chybu, protože bylo dosaženo limitu nepozorovaného sledování.

# tail -f /var/log/messages
[...]
tail: cannot watch '/var/log/messages': No space left on device
# inotifywatch -v /var/log/messages
Establishing watches...
Failed to watch /var/log/messages; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via '/proc/sys/fs/inotify/max_user_watches'.` 

Trochu jsem googlil a každé řešení, které jsem našel, je zvýšit limit pomocí:

Sudo sysctl fs.inotify.max_user_watches=<some random high number>

Ale nemohl jsem najít žádné informace o důsledcích zvýšení této hodnoty. Myslím, že výchozí hodnota jádra byla nastavena z nějakého důvodu, ale zdá se, že pro konkrétní použití není dostatečná. (např. při použití Dropboxu s velkým počtem složek nebo softwaru, který monitoruje mnoho souborů)

Tady jsou moje otázky:

  • Je bezpečné tuto hodnotu zvýšit a jaké by byly důsledky příliš vysoké hodnoty?
  • Existuje způsob, jak zjistit, jaké jsou aktuálně nastavené hodinky a který proces je nastavil, aby bylo možné určit, zda dosažený limit není způsoben vadným softwarem?
221
Ultraspider

Je bezpečné zvýšit tuto hodnotu a jaké by byly důsledky příliš vysoké hodnoty?

Ano, je bezpečné zvýšit tuto hodnotu a níže jsou možné náklady [ zdroj ]:

  • Každý použitý hodinky inotify zabírá 540 bajtů (32bitový systém) nebo 1 kB (double - na 64bitových) [zdroje: 1 , 2 ]
  • Vychází to z paměti jádra , což je nesmazatelné.
  • Za předpokladu, že nastavíte maximum na 524288 a všechny byly použity (nepravděpodobné), měli byste použít přibližně 256 MB/512 MB 32bitové/64bitové paměti jádra.
    • Uvědomte si, že vaše aplikace bude také používat další paměť k sledování úchytů inotify, cest k souborům/adresářům atd. - kolik záleží na jejím návrhu.

Kontrola maximálního počtu hodinek inotify:

cat /proc/sys/fs/inotify/max_user_watches

Nastavení maximálního počtu hodinek inotify

Dočasně:

  • Spustit Sudo sysctl fs.inotify.max_user_watches= s vaší preferovanou hodnotou na konci.

Trvale ( podrobnější informace ):

  • dát fs.inotify.max_user_watches=524288 do nastavení sysctl. V závislosti na vašem systému se mohou nacházet na jednom z následujících míst:
    • Debian/RedHat: /etc/sysctl.conf
    • Arch: vložte nový soubor do /etc/sysctl.d/, např. /etc/sysctl.d/40-max-user-watches.conf
  • možná budete chtít znovu načíst nastavení sysctl, abyste se vyhnuli restartu: sysctl -p (Debian/RedHat) nebo sysctl --system (Arch)

Zkontrolujte, zda byl dosažen maximální počet hodinek inotify:

Použijte tail s -f (follow) možnost na jakémkoli starém souboru, např. tail -f /var/log/dmesg: - Pokud je vše v pořádku, zobrazí se posledních 10 řádků a pauza; přerušit s Ctrl-C - Pokud jste mimo hodinky , selže s touto poněkud kryptická chyba :

ocas: nelze sledovat '/ var/log/dmsg': Na zařízení nezbývá žádný prostor

Chcete-li zjistit, co používá až inotify hodinky

find /proc/*/fd -lname anon_inode:inotify |
   cut -d/ -f3 |
   xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
   uniq -c |
   sort -nr

První sloupec označuje počet inotify fds (nikoli počet hodinek ačkoli) a druhý ukazuje PID tohoto procesu [zdroje: 1 , 2 ].

294
tshepang