Hoje meu servidor travou com Too many open files in system:
, mas eu já tem valores altos, qual é o valor máximo para isso?
Eu sinto que não há bons resultados no Google para isso, explicando o que precisa ser levado em consideração para definir esses valores, eles apenas dizem para definir como 100k.
Eu tenho um servidor de 32 GB de RAM usando apenas 10 GB agora, suponho que aumentar os limites do arquivo para valores muito altos aumentará o uso de RAM. Existe algum tipo de fórmula que você pode usar para calcular isso? Como para 8 GB de RAM, você pode ter um número X de arquivos abertos?
Configurações atuais:
cat /proc/sys/fs/file-max 100000 ulimit -Hn 1048576 ulimit -Sn 1024
Comentários
Resposta
Como Kusalananda diz, aumentando file-max
não terá um impacto direto no uso da memória, mas permitirá que os processos abram mais descritores de arquivo, o que terá um efeito indireto (tanto de rastreamento de descrições de arquivo no kernel quanto de aumento de memória uso nos processos que usam essas descrições e descritores) – os comentários do kernel sugerem aproximadamente um kilobyte por arquivo para os dados do kernel e irão reduzir o valor padrão de file-max
(8192) se isso acabar representa mais de 10% da memória quando o sistema inicializa ( isto é, há apenas 80 MiB de RAM). O valor máximo imposto pelo kernel é o valor máximo que pode ser armazenado em uma variável do tipo long
em C em sua arquitetura.
Se você aumentar file-max
, você também deve aumentar inode-max
; a documentação do kernel diz que isso deve ser “3-4 vezes maior que o valor em file-max, já que stdin, stdout e sockets de rede também precisam de uma estrutura de inode para lidar com eles. ”
Observe que clicar em file-max
resultará em uma mensagem de registro do kernel dizendo“ VFS: limite máximo de arquivo n atingido ”, Com o valor apropriado para n . Se você não tem isso em seus registros, não está acessando file-max
ou filtrando muito seus registros (é uma mensagem de registro em nível de informação).
(file-max
não limita os processos com CAP_SYS_ADMIN
, então bater nele não vai parar tudo.)
Comentários
- Portanto, não há nenhuma desvantagem em ter números arbitrariamente altos? Eu não ' não vejo
inode-max
em meu sistema em qualquer lugar? Ubuntu 16.04 aqui. Eu só quero evitar que meu servidor falhe novamente. Eu executo vários serviços da web neste servidor e não ' não me importo com a utilização de recursos - A desvantagem é que os processos descontrolados não será pego pelo limite geral de descrições de arquivo, então eles podem causar falta de recursos de outras maneiras.
ulimit
mostrará / definirá um limite de recursos por processo.