El comando ‘lsof’

Publicado el 19 de Marzo ,2008 por ekhtor

Como ya sabemos, Linux trabaja sólo con ficheros. Los dispositivos son ficheros, los sockets son ficheros, los directorios… todo a lo que se pueda acceder estará representado en nuestro disco como un fichero más.Por ello, el comando ‘lsof’, puede sernos de gran utilidad.

Éste comando, nos muestra una lista en la que podemos ver los procesos y a qué ficheros están accediendo, lo que significa, que también podemos ver los dispositivos que usan. Si introducimos el comando lsof en consola podremos ver todos los procesos y donde acceden, pero es bastante caótico y no mostrará una información eficiente, asique a continuación veremos los parámetros más usados.

Si lo que queremos es ver los ficheros que están abiertos por un proceso determinado usaremos la opción -p seguida del PID del proceso (como recordatorio, el PID de los procesos se puede ver con el comando ‘ps -A’). Por ejemplo, si queremos ver cuantos ficheros está usando la consola cuyo PID es 16055 escribimos:

ekhtor@servidor:~$ lsof -p 16055
COMMAND   PID   USER   FD   TYPE DEVICE    SIZE    NODE NAME

bash    16055 ekhtor  cwd    DIR    3,1    4096 6275074 /home/ekhtor
bash    16055 ekhtor  rtd    DIR    3,1    4096       2 /
bash    16055 ekhtor  txt    REG    3,1  701680  425989 /bin/bash
bash    16055 ekhtor  mem    REG    3,1  109148 8929293 /lib/ld-2.6.1.so
bash    16055 ekhtor    0u   CHR  136,0               2 /dev/pts/0
bash    16055 ekhtor    1u   CHR  136,0               2 /dev/pts/0
bash    16055 ekhtor    2u   CHR  136,0               2 /dev/pts/0
bash    16055 ekhtor  255u   CHR  136,0               2 /dev/pts/0

De ésta forma podemos observar con total transparencia a qué ficheros accede la consola.

Si por el contrario queremos saber cuantos ficheros tienen abiertos los procesos, para saber cual es el que más carga el sistema, podemos hacerlo agrupando la salida con awk, ordenando con sort y contando el numero de ficheros con uniq:

ekhtor@servidor:~$ lsof | awk ‘{ print $1 }’ | sort | uniq -c
      4 acpid
      4 aio/0
      4 ata/0
      4 ata_aux
      4 atd
      8 avahi-dae
     16 awk
     29 bash
      9 blueproxi
     96 bluetooth
     73 bonobo-ac
      1 COMMAND
      9 compiz
    143 compiz.re
      4 console-k
      4 cron
      4 cupsd
     45 dbus-daem
      4 dd
      4 dhcdbd
      4 dhclient3
    136 emerald
      4 events/0
    436 evolution

Se puede dar el caso de que un proceso está superando el límite de acceso a ficheros del sistema, y gracias al comando anterior, podremos ver el proceso culpable.

Para ver el límite que tiene nuestro sistema ejecutamos el comando sysctl fs.file-max:

ekhtor@servidor:~$ sysctl fs.file-max
fs.file-max = 101755

Y para modificar este límite:

ekhtor@servidor:~$ sysctl fs.file-max=150000

Entradas Relaccionadas

Publica un comentario

Comenta