É seguro aumentar esse valor e quais seriam as conseqüências de um valor muito alto?
Sim, é seguro aumentar esse valor e abaixo estão os possíveis custos [ source ]:
- Cada relógio de inotify usado ocupa 540 bytes (sistema de 32 bits) ou 1 kB (duplo em 64 bits) [fontes: 1 , 2 ]
- Isso vem da memória do kernel , que não pode ser mudada.
- Supondo que você definiu o máximo em 524288 e todos foram usados (improvável), você estaria usando aproximadamente 256 MB / 512 MB de memória de kernel de 32 bits / 64 bits.
- Observe que seu aplicativo também usará memória adicional para acompanhar as alças de inotificação, os caminhos de arquivos / diretórios etc. - o quanto depende do design.
Para verificar o número máximo de relógios inotify:
cat /proc/sys/fs/inotify/max_user_watches
Para definir o número máximo de relógios inotify
Temporariamente:
- Execute
sudo sysctl fs.inotify.max_user_watches=
com seu valor preferido no final.
Permanentemente ( informações mais detalhadas ):
- coloque
fs.inotify.max_user_watches=524288
em suas configurações de sysctl. Dependendo do seu sistema, eles podem estar em um dos seguintes locais:- Debian / RedHat:
/etc/sysctl.conf
- Arch: insira um novo arquivo em
/etc/sysctl.d/
, por exemplo %código%
- Debian / RedHat:
- você pode querer recarregar as configurações de sysctl para evitar uma reinicialização:
/etc/sysctl.d/40-max-user-watches.conf
(Debian / RedHat) ousysctl -p
(Arch)
Verifique se o número máximo de relógios inotify foi alcançado:
Use sysctl --system
com a opção tail
(follow) em qualquer arquivo antigo, por exemplo %código%:
- Se tudo estiver bem, mostrará as últimas 10 linhas e fará uma pausa; abortar com Ctrl-C
- Se você está fora dos relógios , ele irá falhar com este um pouco enigmático erro :
tail: cannot watch '/var/log/dmsg': No space left on device
Para ver o que está usando os relógios inotify
find /proc/*/fd -lname anon_inode:inotify |
cut -d/ -f3 |
xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
uniq -c |
sort -nr
A primeira coluna indica o número de inotify fds (não o número de relógios) e a segunda mostra o PID desse processo [fontes: 1 , 2 ].