Monitoriza el estado del sistema con Top

Top es una de esas herramientas que, si llevas un tiempo usando Linux, seguro que has visto. Lo que probablemente no conozcas es toda la información que se esconde tras todos esos caracteres crípticos y dígitos que, aparentemente, no tienen ningún sentido.

A continuación verás todo lo que siempre quisiste saber de top y nunca te atreviste a preguntar.

Top se encuentra disponible en la inmensa mayoría de los sistemas Unix-Like y básicamente se encuentra disponible en todas las distribuciones Linux.

top general

En esa pantalla se puede encontrar una gran cantidad de información, pero vayamos por partes. En la parte superior podemos encontrar esto:

top time

Si pulsamos ‘l’ podemos ocultar o mostrar esta fila.

De izquierda a derecha, el significado de cada columna es el siguiente:
· top: el modo de visualización. En este caso está en ventana general.
· 20:34:32: Hora actual
· up 1:36: tiempo que el sistema lleva en marcha hh:mm
· 3 users: número de usuario conectados. En esta cantidad se incluye el usuario root y todos aquellos que el sistema necesite para funcionar.
· load average: 0.78, 0.56, 0.41: En estos números se indica la carga del sistema en los últimos 5, 10 y 15 minutos. Estos números no representan un porcentaje de uso de la CPU sino el tiempo de espera de los procesos. Básicamente indica cuan congestionado está el sistema. Si su valor es menor que uno significa que de media, los procesos son atendidos conforme llegan. Si el valor es superior a 1 significa que existen tiempos de espera, o lo que es lo mismo, un proceso tiene que esperar para llevar a cabo su ejecución. Un valor por encima de 1 quiere decir que el ordenador está sobrecargado y si ese número se eleva más aún, todo empezará a ir muy lento. Ocurre que con sistemas multinúcleo, los valores pueden estar situados por encima de 1, por ejemplo en 3 sin que haya ningún problema. La razón es que cada núcleo o procesador suma un entero a la cola de procesos. Eso quiere decir que en un procesador de 4 núcleos se podrá llegar hasta un valor de 4 con normalidad.

top procesos

A continuación nos encontramos con la linea de procesos. Para mostrarla u ocultar deberemos pulsar ‘t’. En ella vemos información resumida sobre los siguientes apartados:
· Tasks: 192 total: Procesos en ejecución. Un programa puede lanzar varios procesos ‘hijos’ que estarán supervisados por un proceso ‘padre’.
· 3 running: Indica el número de procesos que están activos en este momento.
· 189 sleeping: Son procesos que están en ejecución pero que no están haciendo nada
· 0 stopped: Es el número de procesos que están cargados pero se han detenido.
· 0 zombie: Procesos en estado zombi. Un proceso se encuentra en este estado cuando su ejecución está terminando pero, por alguna razón, todavía reside en memoria.

top cpu

En esta linea vemos información sobre el uso del procesador. Al igual que antes, se puede ocultar o mostrar pulsando ‘t’. En este caso sí son porcentajes y, como podemos ver, los usos están repartidos en bastantes tareas:

· 19.9%us: Es el porcentaje de procesador dedicado a procesos lanzados por el usuario.
· 3.7%sy: Indica el uso de procesador de los procesos del sistema. Se trata del uso que hace el kernel.
· 0.0%ni: Representa la demanda de los procesos de baja prioridad.
· 76.2%id: Es el famoso ‘idle’ o porcentaje de procesador sin usar.
· 0.2%wa: Es el tiempo (wait) de procesador que se dedica a procesos de entrada y salida I/O (por ejemplo operaciones en el disco duro).
· 0.0%hi: Tiempo dedicado a las interrupciones del hardware (hardware interruptions).
· 0.0%si: Tiempo para las interrupciones del software (software interruptions).
· 0.0%st: Sólo tiene sentido en sistemas virtualizados. Sale de ‘steal time’. Se trata del tiempo ‘robado’ del procesador físico por el hipervisor a esa máquina virtual. Ese tiempo se puede usar para operaciones propias de la máquina virtual o para ejecutar otra máquina virtual.

top memoria

En estas dos líneas se nos muestra toda la información relacionada con la memoria principal del sistema. Esta información se puede ocultar/mostrar con la tecla ‘m’. Viene a ser la RAM en la primera linea y la partición de intercambio (SWAP) en la segunda linea:

· Mem: 4049692k total: Memoria RAM física instalada.

· 3323988k used: Memoria física usada. En este consumo se incluye la caché del sistema. Eso quiere decir que la memoria consumida por los programas es menor y que cuando estos necesitan más memoria, se libera caché.

· 725704k free: Memoria libre. Es la cantidad de memoria que no se está usando para nada; ni para caché ni para programas.

· 143960k buffers: Principalmente compuesta con una caché del disco que puede contener, por ejemplo, metadatos del sistema de archivos como los permisos.

· Swap: 4094256k total: Es el tamaño de la partición de intercambio.

· 0k used: Como su nombre indica, es la cantidad de SWAP que se está usando. Esta cantidad puede subir incluso cuando todavía queda disponible memoria RAM. Si su valor es muy elevado, el sistema empezará a ir muy lento.

· 4094256k free: Tan sólo indica la cantidad de intercambio que queda disponible. Cuando se agote, el sistema empezará a dar errores, habrá programas que dejen de responder y no será posible ejecutar nuevos procesos.

· 1299676k cached: Aunque se encuentre en el apartado Swap, se trata de memoria consumida en la RAM física. Es parecido a la memoria consumida por el buffer. La diferencia es que la caché almacena informado de los datos de los archivos. Probablemente hayas notado que cuando abres un archivo o un programa la primera vez tarda un tiempo y que cuando lo cierras y lo vuelves a abrir de nuevo lo hace mucho más rápido. Eso es porque los archivos de ese programas están ‘cacheados’ en RAM y no hace falta acceder al disco duro para llegar a ellos. Cuando usas mucha RAM por programas, está caché se va eliminando para dejar sitio a la memoria requerida por los programas.

top lista

Por fin llegamos a la lista de procesos. Aquí aparecen 12 columnas y, aunque algunas parezca crípticas, todas ellas tienen su significado y utilidad:

· PID: Es el identificador que el kernel le da a cada procesos (Process ID). Normalmente el número indica el orden en que se ha ejecutado el proceso. Por ejemplo en la imagen vemos que el PID 1 se lo lleva systemd y que los procesos lanzados por el usuario son más tardíos. Los PID se reciclan cuando quedan libres por lo que no es una referencia absoluta del orden de ejecución si no solo orientativa. Este número resulta útil para manipular la ejecución de cada proceso. Viendo la lista de la imagen, si por ejemplo escribimos en consola ‘kill 4843’ cerraremos Firefox. Esta forma de cerrar procesos solo es recomendable cuando estos dejan de responder.

· USER: Tan solo indica el usuario que ha lanzado el proceso de la linea.

· PR: Indica la prioridad (PRiority) del proceso. En Linux la prioridad de los procesos se mide en una escala de -20 a 20. Cuanto más bajo se el número, mayor prioridad tiene (sí, en contra de la intuición). Un proceso con menos prioridad tendrá que esperar a que los procesos con mayor prioridad terminen de hacer lo suyo. Los procesos marcados con ‘RT’ se ejecutan en tiempo real (Real Time).

· NI: Es otra forma de establecer prioridades de los procesos. La escala es la misma que con PR y tiene la ventaja de que se pueden elegir prioridades usando el comando ‘nice’ desde la consola. Un ejemplo podría ser ‘nice -n 10 firefox’ lo cual ejecutaría Firefox con prioridad 10.

· VIRT: Muestra la cantidad de memoria virtual que está consumiendo el proceso. La memoria virtual muchas veces se confunden con la paginación, o la memoria de intercambio o SWAP pero no tiene absolutamente nada que ver con esto. La memoria virtual ni siquiera tiene por qué existir. Por ejemplo, si un proceso carga un archivo grande, este hace un mapa de memoria de dicho archivo pero este puede no estar almacenado en RAM sino que puede estar contenido directamente en el disco duro aunque esté «ocupando» un espacio de direccionamiento. Esta memoria, a pesar de estar ‘mapeada’ no se está consumiendo realmente.

· RES: Memoria residente (RESident memory). Esta sí es la memoria de verdad. Se trata de la cantidad que consume cada proceso físicamente, es decir, que no se incluye la memoria de intercambio (Swap).

·  SHR: SHaRed Memory Size. Muestra la memoria virtual que podría compartirse con otros procesos. No es memoria residente ni significa que esté siendo compartida en ese momento. Esta memoria representa datos del disco duro o de bibliotecas que podrían eventualmente ser usadas por varios programas a la vez.

· S: Estado del proceso (Process Status). Como ya hemos indicado arriba, los procesos se pueden encontrar en varios estados que en esta columna se representan de la siguiente forma:
– ‘D’ = Mientras un proceso espera a una lectura o escritura del disco el proceso se pone en este estado (Disk Sleep). Se trata de un estado especial ya que el proceso no se puede cerrar o interrumpir mientras se encuentra en dicho estado. También es posible que un proceso se ponga en modo ‘Disk Sleep’ cuando espera una respuesta de ioctl().
– ‘R’ = Funcionando (Running). Es el estado de un programa que se está ejecutando con normalidad.
– ‘S’ = Como ya se ha comentado arriba, un proceso alcanza este estado (Sleeping) cuando  no hace nada.
– ‘T’ = (Traced). En este estado, el proceso está parado normalmente debido a las señales ‘SIGSTOP’ o ‘SIGTSTP’. Cuando se ve un proceso en este estado normalmente es porque se ha presionado Ctrl+Z.
– ‘Z’ = (Zombie). Es un estado en el que el proceso ha terminado su ejecución pero quedan restos de él en memoria. Un proceso en este estado está a la espera de que el proceso padre le envíe el código de salida. Cuando el proceso padre desaparece, el hijo desaparece con él.

· %CPU: Muestra el tiempo de CPU (en porcentaje) que está consumiendo cada proceso. En sistemas multinúcleo o multiprocesador, este porcentaje representa el de una sola CPU. De esa forma, si un solo proceso hace uso de varios procesadores o núcleos a la vez, este porcentaje puede superior al 100%.

· %MEM: Es la proporción de memoria que usa un proceso. En ese porcentaje se incluye tanto memoria física como virtual excluyendo la memoria de intercambio (Swap).

· TIME+: Es el tiempo en centésimas de segundo que un proceso ha hecho uso de la CPU. Dos procesos que llevan el mismo tiempo en ejecución mostrarán tiempos diferentes en función del uso de procesador que hayan hecho: cuanto mayor sea el tiempo de procesador, mayor habrá sido el consumo de CPU de dicho proceso.

· COMMAND: Es el nombre del comando con el que se ha ejecutado el proceso. Para poder ver el comando completo con el que se ha ejecutado dicho proceso hay que ejecutar Top con el modificador -c: ‘top -c’, con lo que veremos lo siguiente:

top c

Aquí termina la descripción del la ventana principal del programa. Para saber más de Top puedes visitar su web.

Las referencias que se han empleado para completar esta entrada son las siguientes:
http://linoxide.com/linux-command/linux-top-command-examples-screenshots/
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
http://unix.stackexchange.com/questions/18918/in-linux-top-command-what-are-us-sy-ni-id-wa-hi-si-and-st-for-cpu-usage
http://superuser.com/questions/575202/understanding-top-command-in-unix
http://serverfault.com/questions/138427/top-what-does-virtual-memory-size-mean-linux-ubuntu
http://linuxpoison.blogspot.com.es/2009/10/what-is-difference-among-virt-res-and.html
http://stackoverflow.com/questions/1475683/linux-process-states
http://stackoverflow.com/questions/307502/in-linux-what-do-all-the-values-in-the-top-command-mean