Como definir e entender fs.notify.max_user_watches

13

Eu não entendo a melhor maneira de definir fs.inotify.max_user_watchescom sysctl. De fato, não entendo muito do que está acontecendo aqui, exceto o fato de precisar definir o número de arquivos que podem ser assistidos por um processo específico.

Acredito que posso ver o número máximo de usuários executando este comando:

cat /proc/sys/fs/inotify/max_user_watches

Meu entendimento é que algumas pessoas sugerem mudanças /proc/sys/fs/inotify/max_user_watchesabrindo /etc/sysctl.confem um editor e adicionando isso a ele:

fs.inotify.max_user_watches=524288

Em seguida, execute sudo sysctl -ppara - presumivelmente - processar as alterações feitas no arquivo.

Outros sugerem a execução de comandos como este:

sudo sysctl -w fs.inotify.max_user_instances=1024
sudo sysctl -w fs.inotify.max_user_watches=12288

Eu sei que -wsignifica escrever, mas o que está sendo escrito e onde? É apenas que este comando muda /proc/.../max_user_watches?

Qual das duas abordagens descritas acima é a melhor? Entendo que 524288 e 12288 são números diferentes, mas não entendo a diferença entre o efeito de execução -pe -w.

ccalvert
fonte

Respostas:

10

sysctl -wgrava os valores dos parâmetros do kernel nas chaves correspondentes em /proc/sys:

sudo sysctl -w fs.inotify.max_user_watches=12288

escreve 12288para /proc/sys/fs/inotify/max_user_watches. (Não é equivalente, é exatamente isso; os leitores interessados ​​podem stracever por si mesmos.)

sysctl -p

carrega as configurações de um arquivo /etc/sysctl.conf(o padrão) ou o arquivo que for especificado depois -p.

A diferença entre as duas abordagens, além das diferentes fontes dos parâmetros e valores que eles escrevem, é que -wapenas altera os parâmetros até a próxima reinicialização, enquanto os valores armazenados /etc/sysctl.confserão aplicados novamente sempre que o sistema inicializar. Minha abordagem usual é usar -wpara testar valores e, depois de ter certeza de que as novas configurações estão corretas, escreva-as /etc/sysctl.confou um arquivo em /etc/sysctl.d(normalmente /etc/sysctl.d/local.conf).

Veja o sysctlesysctl.conf páginas de manual ( man sysctle man sysctl.confno seu sistema) para obter detalhes.

Stephen Kitt
fonte