Por que file-nr e lsof contam com arquivos abertos difere? [fechadas]

19

De repente, estou com um problema; todos os meus aplicativos e o servidor estavam funcionando bem e, de repente, vejo o número de arquivos abertos disparando.

Estou verificando com este comando:

cat /proc/sys/fs/file-nr

Quando verifico isso, mostra 44544 0 12800044544 é o número de arquivos abertos.

Mas quando eu verifico com este comando - lsof | wc -l mostra - 28384.

Então, qual está correto?

Meu limite máximo de arquivos abertos é 65535

ulimit -a
open files                      (-n) 65535

Quero conhecer os 5 principais processos que estão usando mais arquivos abertos. Posso obter isso, lsofmas a contagem mostrada aqui é muito diferente do outro comando que mencionei acima.

Posso obter os detalhes dos processos contados por este comando cat /proc/sys/fs/file-nr?

De acordo com o link abaixo mencionado, ele diz que não podemos: Como exibir descritores de arquivos abertos, mas não usando o comando lsof

Existe uma solução para mim? Preciso descobrir qual processo começou a usar mais arquivos abertos de repente.

ATUALIZAÇÃO Desculpe pessoal pelo problema. Eu encontrei o erro que eu estava cometendo, eu não estava verificando lsof | wc -l a partir do root. essa é a razão pela qual eu estava vendo uma enorme diferença.

ainda existe uma diferença entre a saída do arquivo -nr e lsof | wc -l (da raiz). lsof count é mais que file -nr count. o motivo disso é que o arquivo -nr ignora alguns dos diretórios (que são considerados arquivos pelo lsof). Encontrei esse motivo em uma pequena pesquisa no próprio google. em todo o caso! Obrigado rapazes por toda a ajuda!

Vasanth Nag KV
fonte
Está lsof | wc -l realmente mostrando um número negativo?
Joe Sewell
3
isso não era um sinal negativo, é um hífen!
Vasanth Nag KV

Respostas:

8

Parece haver duas perguntas em jogo aqui. Primeiro, a documentação completa das estruturas file-nr e file-max pode ser encontrada em

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

Isso define os campos nesse arquivo como:

Os três valores em file-nr indicam o número de identificadores de arquivo alocados, o número de identificadores de arquivo alocados, mas não utilizados, e o número máximo de identificadores de arquivo. O Linux 2.6 sempre relata 0 como o número de identificadores de arquivos gratuitos - isso não é um erro, apenas significa que o número de identificadores de arquivos alocados corresponde exatamente ao número de identificadores de arquivos usados.

Espero que esteja claro o suficiente. A segunda pergunta foi respondida no segmento mencionado acima ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) e parece evoluir para

  1. "use lsof" e filtre a saída adequadamente se você precisar obter uma boa aproximação dos descritores de arquivo em uso por um processo ou,
  2. percorra o sistema de arquivos / proc (e ainda precisará filtrar a saída) para obter uma captura instantânea no momento em que o descritor de arquivo for usado.

A dificuldade de obter métricas precisas para isso é significativa, pois o número de DFs em uso em qualquer ponto pode flutuar muito rapidamente em um sistema.

O segmento a seguir sugere um esquema de filtragem para a abordagem 'lsof':

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim

Thomas N
fonte
atualizou minha pergunta. mas obrigado por todas as informações lá em cima.
Vasanth Nag KV
Mas como é possível, do que ulimitpara mim diz que posso ter até 1024 arquivos abertos, se lsof | wc -ldiz que já tenho 1545?
Nakilon
Por favor, leia as páginas de manual lsofe ulimitpara a resposta à sua pergunta.
Thomas N