Limite de usuários de relógios inotify atingidos no Ubuntu 16.04

43

Acabei de instalar o Ubuntu 16.04 e recebo este aviso quando inicio o SmartGit :

IOException: User limit of inotify watches reached

Além disso, recebo o lançamento deste aviso tail -f:

tail: inotify resources exhausted 

tail: inotify cannot be used, reverting to polling

Eu nunca recebi esse erro no Ubuntu 14.04 e os aplicativos e arquivos que estou usando no novo Ubuntu são exatamente os mesmos que eu estava usando na versão anterior.

As únicas diferenças relevantes são que eu adicionei um disco rígido adicional no PC e configurei a ferramenta de backup do Ubuntu. Esse problema pode estar relacionado a um segundo disco ou à ferramenta de backup?

Andrea
fonte

Respostas:

76

O padrão atual no Xenial é 8192 (consulte fs / notify / inotify / inotify_user.c na fonte do kernel), você pode verificar isso imprimindo o arquivo em stdout:

cat /proc/sys/fs/inotify/max_user_watches
8192

Você pode aumentar o número, por exemplo, dobrando para 16384, usando:

echo 16384 | sudo tee /proc/sys/fs/inotify/max_user_watches

tenha em mente que os relógios inotify consomem memória, acho que são cerca de 160 bytes por relógio em sistemas de 64 bits.

Para definir isso permanentemente, adicione uma entrada ao /etc/sysctl.conf, por exemplo:

echo fs.inotify.max_user_watches=16384 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

..ou editar manualmente /etc/sysctl.conf(você precisa de privilégios de root para atualizá-lo) e depois executarsudo sysctl -p

Colin Ian King
fonte
Sim obrigado. Dobrei e agora não tenho mais avisos. Quanta memória (no máximo) será consumida para 16.384 relógios? Meus cálculos me dão mais ou menos 2,5 MB . Está certo?
187 Andrea Andrea
Algo nessa ordem, mais alguma sobrecarga; não é muito grande no grande esquema de thing.s
Colin Ian Rei
aqui está mais algumas informações sobre o possível consumo de memória de (usado) relógios askubuntu.com/questions/154255/...
michael
11

As respostas acima funcionam muito bem, mas não explicam por que eu estava procurando aqui minha tentativa de obter uma resposta completa -

Por quê?

Programas que sincronizam arquivos como dropbox, git etc usam o inotify para observar alterações no sistema de arquivos. O limite pode ser visto por -

cat /proc/sys/fs/inotify/max_user_watches

Para mim, mostra 100000 . Quando esse limite não é suficiente para monitorar todos os arquivos dentro de um diretório, gera esse erro.


Aumentando a quantidade de inotify watchers (versão curta):

Se você estiver executando o Debian, RedHat ou outra distribuição Linux semelhante , execute o seguinte em um terminal:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Se você estiver executando o ArchLinux , execute o seguinte comando (veja aqui o porquê):

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Em seguida, cole-o no seu terminal e pressione Enter para executá-lo.


Detalhes técnicos:

O Listen usa inotify por padrão no Linux para monitorar diretórios quanto a alterações. Não é incomum encontrar um limite do sistema para o número de arquivos que você pode monitorar. Por exemplo, o limite de inotificação do Ubuntu Lucid (64 bits) está definido como 8192.

Você pode obter seu limite atual de observação de arquivos inotify executando:

$ cat /proc/sys/fs/inotify/max_user_watches

Quando esse limite não é suficiente para monitorar todos os arquivos dentro de um diretório, o limite deve ser aumentado para que o Listen funcione corretamente.

Você pode definir um novo limite temporário com:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Se você deseja tornar seu limite permanente, use:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p

Você também pode precisar prestar atenção aos valores de max_queued_events e max_user_instances se o Listen continuar reclamando.

Fonte: https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers

Aniket Thakur
fonte
3

Você pode verificar o limite existente e, com base nisso, pode alterá-lo conforme sua exigência

To Check : cat /proc/sys/fs/inotify/max_user_watches To Alter : sudo sysctl fs.inotify.max_user_watches=524288

Isso resolverá o erro.

Patel Nikhil
fonte