“Muitos arquivos abertos no sistema” no VPS com LSOF longe da MAXFILES

1

Bom dia.

Ultimamente meu servidor VPS (CentOS nele) começou a esmagar com o erro "Há muitos arquivos abertos no sistema". Eu li muitos sobre o erro e sei que o limite é definido pelo meu provedor de hospedagem. Recebi uma lista de limites do provedor de hospedagem e eles dizem que o limite é de 12000 arquivos.

Eu tentei procurar o problema usando o utilitário lsof . Quando o problema ocorreu eu consegui encontrar essas respostas de lsof stat:

[root@XXXXXXXX]# lsof | wc -l 
3895

algumas vezes chegou a 4300 mais ou menos, mas eu nunca o vi pulando mais alto do que isso.

A questão é colocada assim: O utilitário lsof pode não mostrar resultados completos, ou é o problema do host? Se é mais do que o que posso usar alternativamente para obter a máxima precisão do número.

    
por Taras Voinarovskyi 13.04.2012 / 14:45

2 respostas

1

Você pode monitorar /proc/sys/fs/file-nr com a ferramenta de sua escolha, sendo a mais simples cat /proc/sys/fs/file-nr - o primeiro número mostra as alças de arquivo alocadas, a segunda alças de arquivo alocadas, mas não usadas, e o último número mostra o número máximo de identificadores de arquivo.

Essa informação é fornecida pelo próprio kernel.

    
por 13.04.2012 / 15:01
1

O importante é como o seu host mede o número de arquivos abertos. Certamente /proc/sys/fs/file-nr é um ótimo candidato, então +1 para isso.

lsof inclui "arquivos" não contados nesse total, no entanto. Eu ficaria surpreso se file-nr disser que mais identificadores de arquivos estão abertos do que lsof lists.

A outra coisa a ter em mente é o tamanho das tabelas do descritor de arquivos. Cada processo tem uma tabela FD, mas também há uma tabela de arquivos do sistema. Seu host poderia ter tomado a decisão (francamente ridícula) de calcular arquivos abertos pela tabela FD por processo. Você pode ver isso como o campo FDSize em /proc/<pid>/status para cada processo. Tem que ser um múltiplo de 2 em tamanho e é aumentado em tamanho para o menor múltiplo de 2 que conterá todos os arquivos abertos. Podemos somar todas as entradas do FDSize. Novamente, essa seria uma maneira incomum de medir arquivos abertos, mas além de um processo que abre rapidamente muitos arquivos que aumentam rapidamente seu uso, não posso explicar por que a contagem deles é muito maior.

Eu usei um script para somar o FDSize total de todos os processos abertos e tentei as três contagens em dois sistemas de teste (como root):

$ cat /proc/sys/fs/file-nr
544     0   12640
$ lsof | wc -l
1377
$ find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi FDSize '{}'/status \; | cut -f 2 | awk '{total = total + $1}END{print total}'
5888

$ cat /proc/sys/fs/file-nr
8670    0   1587168
$ sudo /usr/sbin/lsof | wc -l
12309
$ find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi FDSize '{}'/status \; | cut -f 2 | awk '{total = total + $1}END{print total}'
33088

Você pode simplesmente perguntar ao seu host como eles medem os arquivos abertos. Realmente o FDSize é totalmente sem sentido, eu não posso imaginar que eles estão fazendo isso de verdade, mas é a única maneira que eu posso pensar em inflar minha contagem de arquivos abertos.

    
por 13.04.2012 / 15:41

Tags