¿Por qué el número de archivos nr y lsof en archivos abiertos difiere? [cerrado]

19

Me encuentro con un problema de repente; Todas mis aplicaciones y el servidor funcionaban bien y, de repente, veo que se dispara la cantidad de archivos abiertos.

Lo estoy comprobando con este comando:

cat /proc/sys/fs/file-nr

Cuando 44544 0 128000verifico esto, se muestra , entonces 44544 es el número de archivos abiertos.

Pero cuando lsof | wc -l verifico con este comando, muestra 28384.

¿Y cuál es la correcta?

Mi límite máximo de archivos abiertos es 65535

ulimit -a
open files                      (-n) 65535

Quiero conocer los 5 procesos principales que utilizan más archivos abiertos. Puedo obtener esto, lsofpero el conteo que se muestra aquí es muy diferente del otro comando que mencioné anteriormente.

¿Puedo obtener los detalles de los procesos contados por este comando cat /proc/sys/fs/file-nr?

De acuerdo con el enlace mencionado a continuación, dice que no podemos, Cómo mostrar descriptores de archivos abiertos pero sin usar el comando lsof

¿Hay alguna solución para mí? Necesito encontrar qué proceso comenzó a usar más archivos abiertos de repente.

ACTUALIZACIÓN Perdón chicos por el problema. Encontré el error que estaba cometiendo, NO estaba comprobando lsof | wc -l desde la raíz. Esa es la razón por la que estaba viendo una gran diferencia.

todavía hay una diferencia entre la salida del archivo -nr y lsof | wc -l (desde la raíz). lsof count es más que file -nr count. La razón de esto es que file -nr ignora algunos de los directorios (que son considerados como archivos por lsof). Encontré esta razón por una pequeña investigación en Google. de todos modos! ¡Gracias chicos por toda la ayuda!

Vasanth Nag KV
fuente
¿ lsof | wc -l Realmente muestra un número negativo?
Joe Sewell
3
eso no fue un signo negativo, es un guión!
Vasanth Nag KV

Respuestas:

8

Parece que hay dos preguntas en juego aquí. Primero, puede encontrar documentación completa de las estructuras file-nr y file-max en

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

Esto define los campos en ese archivo como:

Los tres valores en file-nr denotan el número de identificadores de archivo asignados, el número de identificadores de archivo asignados pero no utilizados y el número máximo de identificadores de archivo. Linux 2.6 siempre informa 0 como el número de identificadores de archivos libres; esto no es un error, solo significa que el número de identificadores de archivos asignados coincide exactamente con el número de identificadores de archivos utilizados.

Esperemos que sea lo suficientemente claro. La segunda pregunta ha sido respondida en el hilo mencionado anteriormente ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) y parece delegar a cualquiera

  1. "use lsof" y filtre la salida de manera adecuada si necesita obtener una buena aproximación de los descriptores de archivo en uso por un proceso o,
  2. atraviese el sistema de archivos / proc (y aún tenga que filtrar la salida) para obtener una instantánea a tiempo del uso del descriptor de archivo.

La dificultad de obtener métricas precisas para esto es significativa, ya que el número de FD en uso en cualquier punto dado puede fluctuar muy rápidamente en un sistema.

El siguiente hilo sugiere un esquema de filtrado para el enfoque 'lsof':

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

Thomas N
fuente
actualizado mi pregunta pero gracias por toda la información allí arriba.
Vasanth Nag KV
Pero, ¿cómo es posible, que ulimitpara mí dice que puedo tener abiertos hasta 1024 archivos, si lsof | wc -ldice que ya tengo 1545?
Nakilon
Lea las páginas del manual en lsofy ulimitpara obtener la respuesta a su pregunta.
Thomas N