GNU/Linux >> Tutoriales Linux >  >> Linux

Verifique el límite de FD abierto para un proceso dado en Linux

Puede intentar escribir un script que llame periódicamente a lsof -p {PID} en el pid dado.


para ver los 20 principales manejadores de archivos usando procesos:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

la salida tiene el formato de cuenta de identificadores de archivo, pid, cmndline para el proceso

salida de ejemplo

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

Cuente las entradas en /proc/<pid>/fd/ . Los límites estrictos y flexibles que se aplican al proceso se pueden encontrar en /proc/<pid>/limits .


Las únicas interfaces proporcionadas por el kernel de Linux para obtener límites de recursos son getrlimit() y /proc/ pid /limits . getrlimit() solo puede obtener los límites de recursos del proceso de llamada. /proc/ pid /limits le permite obtener los límites de recursos de cualquier proceso con la misma identificación de usuario y está disponible en RHEL 5.2, RHEL 4.7, Ubuntu 9.04 y cualquier distribución con un kernel 2.6.24 o posterior.

Si necesita admitir sistemas Linux más antiguos, deberá hacer que el proceso en sí llame a getrlimit() . Por supuesto, la forma más fácil de hacerlo es modificando el programa o una biblioteca que utiliza. Si está ejecutando el programa, podría usar LD_PRELOAD para cargar su propio código en el programa. Si nada de eso es posible, puede adjuntar al proceso con gdb y hacer que ejecute la llamada dentro del proceso. También podrías hacer lo mismo tú mismo usando ptrace() adjuntar al proceso, insertar la llamada en su memoria, etc., sin embargo esto es muy complicado de acertar y no es recomendable.

Con los privilegios apropiados, las otras formas de hacer esto implicarían mirar a través de la memoria del núcleo, cargar un módulo del núcleo o modificar el núcleo de otra manera, pero asumo que esto está fuera de discusión.


Linux
  1. Linux:¿limitar el uso de memoria para un solo proceso de Linux?

  2. ¿Cómo calcular el uso de CPU de un proceso por PID en Linux desde C?

  3. Biblioteca de Python para la gestión de procesos de Linux

  4. Cómo configurar la ID del proceso en Linux para un programa específico

  5. Script de Linux para verificar si el proceso se está ejecutando y actuar sobre el resultado

Cómo verificar todos los puertos abiertos en su sistema Linux

Cómo encontrar el PID y PPID de un proceso en Linux

Todas las formas de verificar si un puerto está abierto en Linux

Los 10 mejores administradores de portapapeles de código abierto para Linux

Las 10 herramientas de navegación de archivos de código abierto para el sistema Linux

Los 10 mejores renderizadores de código abierto para el sistema Linux