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.