Diferença entre ulimit, lsof, cat / proc / sys / fs / file-max

0

Eu tenho recebido java.io.IOException: Too many open files durante a execução de uma instância do Kafka e usando um tópico com 1000 partições, então comecei a investigar os limites de descritores de arquivo em minha ec2 vm. Não consigo entender qual é exatamente o limite para arquivos abertos em uma máquina Centos 7, pois todos os comandos a seguir produzem resultados diferentes. Os comandos são:

  • ulimit -a : arquivos abertos 1024
  • lsof | wc -l : 298280
  • cat /proc/sys/fs/file-max : 758881 (que é consistente com /proc/sys/fs/file-nr )

Se o limite real é aquele que o último comando produz, então eu estou bem abaixo dele ( lsof | wc -l : 298280). Mas, se este for o caso, a saída do comando ulimit não é clara para mim, pois estou bem acima dos 1024 arquivos abertos.

De acordo com a documentação oficial, a melhor maneira de verificar os descritores de arquivos em Centos é a /proc/sys/fs/file-max file mas há todas essas aparentemente "inconsistências" entre esses comandos?

    
por Niko 18.10.2018 / 17:04

1 resposta

2
  1. file-max é o número máximo de arquivos que podem ser abertos em todo o sistema. Isso é imposto no nível do kernel.

  2. A página man de lsof afirma que:

In the absence of any options, lsof lists all open files belonging to all active processes.

  1. Finalmente, ulimit é usado para impor limites de recursos em um nível de usuário. O parâmetro 'número de arquivos abertos' é definido no nível do usuário, mas é aplicado a cada processo iniciado por esse usuário. Nesse caso, um único processo do Kafka pode ter até 1024 identificadores de arquivos abertos (limite flexível).

Você pode aumentar este limite por conta própria até o limite máximo, 4096. Para aumentar o limite, é necessário ter acesso root.

Se o Kafka estiver sendo executado como um único processo, você poderá encontrar o número de arquivos abertos por esse processo usando lsof -p [PID] .

Espero que isso resolva as coisas.

    
por 18.10.2018 / 17:36