Conte o número de descritores de arquivo abertos por um processo com lsof

1

Preciso verificar o número de descritores de arquivo que são abertos por um processo Java. A saída de lsof é de quase 40000 linhas. Aqui está apenas o começo:

COMMAND   PID     USER   FD      TYPE             DEVICE  SIZE/OFF     NODE NAME
java    12003 jboss  cwd       DIR              253,7      4096  1835012 /obcdn/Jboss/bin
java    12003 jboss  rtd       DIR              253,0      4096        2 /
java    12003 jboss  txt       REG              253,7      7336  2621459 /obcdn/java1.8/bin/java
java    12003 jboss  mem       REG              253,2    111080   171382 /usr/lib64/libresolv-2.17.so
java    12003 jboss  mem       REG              253,2     27776   133531 /usr/lib64/libnss_dns-2.17.so
java    12003 jboss  mem       REG              253,7    278078  1966631 /obcdn/Jboss/modules/system/layers/base/org/yaml/snakeyaml/main/snakeyaml-1.15.0.redhat-1.jar
java    12003 jboss  mem       REG              253,7    360979  1835896 /obcdn/Jboss/modules/system/layers/base/org/apache/james/mime4j/main/apache-mime4j-0.6.0.redhat-5.jar
java    12003 jboss  mem       REG              253,7     32957  1835471 /obcdn/Jboss/modules/system/layers/base/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/main/jackson-module-jaxb-annotations-2.5.4.redhat-1.jar
java    12003 jboss  mem       REG              253,7     28742  1835469 /obcdn/Jboss/modules/system/layers/base/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/main/jackson-jaxrs-base-2.5.4.redhat-1.jar
java    12003 jboss  mem       REG              253,7     16843  1835470 /obcdn/Jboss/modules/system/layers/base/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider

Parece que o processo está usando quase 40000 descritores de arquivo, isso parece um pouco demais, também estou preocupado com o fato de um ulimit -a mostrar esse número máximo de arquivos abertos

open files                      (-n) 40000

Apenas para confirmar minha análise: cada linha da saída lsof é realmente um FD aberto ou devo cumprimentar a saída de alguma forma para ter a contagem correta? obrigado

Francesco Marchioni
fonte
3
Você também pode fazer ls /proc/$PID/fd/|wc -londe PID é o ID do processo.
meuh

Respostas:

2

memnão são FDs, eles são mmap(). Então, eu grep -v " mem "tenho certeza. cwd, rtdE txtnão são DFs quer, mas não deve haver exatamente um de cada um, para que eles não terão um efeito muito significativo sobre seus números.

sourcejedi
fonte