Por que lsof -p e apenas lsof retornam resultados drasticamente diferentes?

1

Atualmente, defini um limite de 100000 arquivos abertos, mas lsof relatórios que está prestes a esgotar-se.

A execução de lsof -n | awk '{print $2'} | sort | uniq -c | sort -n resulta em:

      1 PID
  90321 3979

Quase o mesmo resultado é recebido por lsof -n | grep 3979 | wc -l

Mas a execução de lsof -n -p 3979 | wc -l retorna algo totalmente diferente

3930

A contagem dos arquivos em /proc/3979/fd/ também retorna o resultado menor.

    
por Dimitar 12.05.2017 / 16:05

1 resposta

0

Eu olhei os logs do dropbox no meu sistema e vejo diferenças comparáveis.

Quando olho em detalhes nos logs individuais, descubro que dropbox é exibido com 400 arquivos abertos com lsof -p e 23500 abertos com ls ... | grep '^dropbox'

Olhando para a longa lista, descubro que dropbox tem 60 encadeamentos e a maioria dos 400 arquivos base é relatada em cada encadeamento, explicando assim a diferença.

O que eu não sei é se os manipuladores de arquivos nos segmentos estão na memória compartilhada ou são individuais para os segmentos. As alças de arquivos na memória compartilhada não devem ser contadas mais de uma vez no limite de arquivos abertos.

Meu comando para contar os tópicos foi:

lsof -n | grep "^dropbox " | awk '{print $3}' | uniq | wc -l

Se o seu aplicativo se comportar de maneira semelhante, o valor mais baixo será o realista.

Observe que todas as figuras são aproximadas: Ignorei quando as linhas de cabeçalho estão incluídas nas contagens e a inclusão do PID de base nas contagens de encadeamentos. Como os relatórios ls são de tempos diferentes, eles nunca podem ser totalmente reconciliados.

    
por 12.05.2017 / 18:57