desenv-web-rp.com

Como exibir descritores de arquivos abertos, mas não usando o comando lsof

Oi eu li Aqui que lsof não é uma maneira precisa de obter o número de descritores de arquivo que estão abertos no momento. Ele recomendou usar esse comando

 cat /proc/sys/fs/file-nr

Enquanto este comando exibe o número de FDs, como você exibe a lista de descritores de arquivos abertos que o comando acima contou?

48
dimas

Há dois motivos lsof | wc -l não conta com descritores de arquivo. Uma é que lista coisas que não são arquivos abertos, como bibliotecas carregadas dinamicamente e diretórios de trabalho atuais; você precisa filtrá-los. Outra é que lsof leva algum tempo para ser executado; portanto, pode haver perda de arquivos que são abertos ou fechados enquanto estão em execução; portanto, o número de arquivos abertos listados é aproximado. Olhando para /proc/sys/fs/file-nr fornece um valor exato em um determinado momento.

cat /proc/sys/fs/file-nr é útil apenas quando você precisa da figura exata, principalmente para verificar a exaustão de recursos. Se você deseja listar os arquivos abertos, precisa chamar lsof ou usar algum método equivalente, como arrastar /proc/*/fd manualmente.

60

As informações do processo são mantidas dinamicamente pelo sistema nos diretórios em/proc. Por exemplo, o processo com o PID 1234 terá um diretório chamado/proc/1234.

Há bastante informação lá, mas agora você está interessado no subdiretório/proc/1234/fd.

NOTA: Você precisa ter permissões de root para exibir ou abrir arquivos para processos que você não possui, bem como para processos SetUID.

Exemplo:

[email protected]:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

[email protected]:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

Também dê uma olhada no restante dos arquivos em/proc ... muitas informações úteis do sistema residem aqui.

25
Johan