GNU/Linux >> Tutoriales Linux >  >> Linux

Conteo de archivos abiertos por proceso

Prueba esto:

ps aux | sed 1d | awk '{print "fd_count=$(lsof -p " $2 " | wc -l) && echo " $2 " $fd_count"}' | xargs -I {} bash -c {}

Utilicé esto para encontrar los principales procesos que consumen controladores de archivos para un usuario determinado (nombre de usuario) donde no tienen acceso lsof o root:

for pid in `ps -o pid -u username` ; do echo "$(ls /proc/$pid/fd/ 2>/dev/null | wc -l ) for PID: $pid" ; done  | sort -n | tail

Eche un vistazo al /proc/ sistema de archivos:

ls /proc/$pid/fd/ | wc -l

Para hacer esto para todos los procesos, use esto:

cd /proc
for pid in [0-9]*
do
    echo "PID = $pid with $(ls /proc/$pid/fd/ | wc -l) file descriptors"
done

Como una sola línea (filtre agregando | grep -v "0 FDs" ):

for pid in /proc/[0-9]*; do printf "PID %6d has %4d FDs\n" $(basename $pid) $(ls $pid/fd | wc -l); done

Como una sola línea que incluye el nombre del comando, ordenado por recuento de descriptores de archivo en orden descendente (limite los resultados agregando | head -10 ):

for pid in /proc/[0-9]*; do p=$(basename $pid); printf "%4d FDs for PID %6d; command=%s\n" $(ls $pid/fd | wc -l) $p "$(ps -p $p -o comm=)"; done | sort -nr

Crédito a @Boban por este anexo:

Puede canalizar la salida de la secuencia de comandos anterior a la siguiente secuencia de comandos para ver los diez procesos (y sus nombres) que tienen la mayor cantidad de descriptores de archivos abiertos:

  ...
done | sort -rn -k5 | head | while read -r _ _ pid _ fdcount _
do
  command=$(ps -o cmd -p "$pid" -hc)
  printf "pid = %5d with %4d fds: %s\n" "$pid" "$fdcount" "$command"
done

Aquí hay otro enfoque para enumerar los diez procesos principales con los fds más abiertos, probablemente menos legibles, por lo que no lo pongo al frente:

find /proc -maxdepth 1 -type d -name '[0-9]*' \
     -exec bash -c "ls {}/fd/ | wc -l | tr '\n' ' '" \; \
     -printf "fds (PID = %P), command: " \
     -exec bash -c "tr '\0' ' ' < {}/cmdline" \; \
     -exec echo \; | sort -rn | head

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

  2. Máximo de archivos abiertos para el proceso de trabajo

  3. Conteo recursivo de archivos en un directorio de Linux

  4. No se puede cambiar el número máximo de archivos abiertos por proceso con sysctl

  5. Demasiados archivos abiertos en Debian

Cómo aumentar el número de límites de archivos abiertos en Linux

¿No se puede eliminar el proceso de Gedit desde su Pid?

¿Cómo identificar un proceso que no tiene Pid?

Cómo encontrar el nombre del proceso a partir de su PID

¿Los archivos .pid son confiables para determinar si un proceso se está ejecutando?

Cómo obtener pid del proceso recién iniciado