Blog

Como detectar procesos que hacen uso excesivo de CPU y RAM en Linux

Como detectar procesos que hacen uso excesivo de CPU y RAM en Linux
Publicado por: Gerardo Arroyo Arce

En este articulo explicaremos como detectar procesos que utilizan gran cantidad de CPU y RAM, utilizando los comandos top y ps.

En Linux tenemos una gran cantidad de procesos en ejecución, estos pueden ser programas, servicios y demás, un proceso también puede depender de otro como un proceso padre, estos pueden heredar atributos tales como roles, permisos, propietario, archivos y demás.

Cada proceso también tiene su propio identificador único llamado PID Process identification number, este puede cambiar si el proceso se termina y luego se vuelve a iniciar.
Ahora bien, una manera fácil de identificar los procesos que se están ejecutando en nuestro sistema es utilizando el comando top, con el cual, mediante una interfaz de texto podemos ver un listado de procesos que se están ejecutando en el sistema en tiempo real, con una serie de parámetros de información, además esta interfaz nos muestra información sobre el estado del sistema en general, como vemos a continuación ejecutando el siguiente comando:

{% highlight bash %}
[root@server1 ~]# top
{% endhighlight %}

En la primera línea obtenemos los siguientes datos sobre la actividad y carga del sistema:

  • Hora: Hora actual del sistema.
  • Up: Tiempo del sistema encendido.
  • Users: Cantidad de usuarios.
  • Load average: Cantidad de carga promedio en intervalos de 5-10-15 minutos.

En la segunda línea obtenemos información sobre las tareas o procesos:

  • Tasks: Cantidad de tareas y procesos del sistema en total.
  • Running: Procesos en ejecución de forma activa, (Se identifican con la letra R).
  • Sleeping: Procesos en espera para su ejecución, (Se identifican con la letra S).
  • Stopped: Ejecución de procesos próximos a detenerse, (Se identifican con la letra T).
  • Zombie: Estos procesos no se están ejecutando, ya que su proceso padre muere, (Se identifican con la letra Z).

En la tercer line obtenemos Informacion del CPU:

  • us: Tiempo de CPU de usuario.
  • sy: Tiempo de CPU del kernel.
  • ni: Tiempo de CPU del usuario con nice positivo.
  • id: Tiempo de CPU para procesos inactivos.
  • wa: Tiempo de CPU para procesos en espera.
  • hi: Interrupciones de hardware.
  • si: Tiempo de CPU en interrupciones de hardware.
  • st: Especifico para maquinas virtuales, indica el tiempo de espera en cola de ejecución de acuerdo al tiempo de procesamiento del hypervisor.

En la cuarta y quinta línea obtenemos informacion sobre la Memoria:

En la última línea obtenemos información sobre los procesos con los siguientes parámetros de información:

  • PID: Identificador único para el proceso.
  • USER: Usuario propietario.
  • PR: Prioridad del proceso.
  • NI: Prioridad asignada (Entre más bajo sea este valor tiene más prioridad).
  • VIRT: Memoria virtual utilizada por el proceso.
  • RES: Memoria RAM física utilizada por el proceso.
  • SHR: Memoria compartida por el proceso.
  • S: Estado del proceso (R, S, T, Z).
  • %CPU Porcentaje de CPU utilizado por el proceso.
  • `%MEMv Porcentaje de memoria física utilizada por el proceso.
  • TIME+ Tiempo de utilización de CPU del proceso.
  • COMMAND Comando con el cual se inicia el proceso.

Además, utilizando las siguientes opciones podemos obtener más funcionalidades:

  • M: Ordenamiento por uso de memoria.
  • P: Ordenamiento por uso de CPU.
  • T: Ordenamiento por tiempo de CPU utilizado.
  • F: Filtro con el cual podemos seleccionar el ordenamiento para la lista de procesos.
  • i: Muestra u oculta los procesos zombie.
  • s: Cambia el tiempo de actualización de la interfaz.
  • z: Cambia los colores.
  • K: Se utiliza para matar procesos solicitando su PID.
  • r: Cambia el nice value solicitando el PID del proceso.
  • q: Se utiliza para salir de la interfaz.
  • h: Muestra la ayuda.

Por otra parte, también tenemos el comando ps, este nos permite visualizar información sobre los procesos de una forma más específica, por ejemplo, si deseamos buscar el proceso SSH lo podemos realizar de la siguiente manera utilizando un pipe con la opción grep y el nombre del proceso:

{% highlight bash %}
[root@server1 ~]# ps -aux | grep ssh
root 1019 0.0 0.4 112812 4288 Ss 10:57 0:00 /usr/sbin/sshd -D
root 1270 0.0 0.6 159156 6332 Ss 10:57 0:05 sshd: root@pts/0
root 1598 0.0 0.6 159156 6312 Ss 13:36 0:00 sshd: root@pts/1
root 1602 0.0 0.5 158808 5768 Ss 13:36 0:00 sshd: root@notty
root 1606 0.0 0.2 72180 2820 Ss 13:36 0:00 /usr/libexec/openssh/sftp-server
{% endhighlight %}

Algunas de las opciones más relevantes del comando ps son las siguientes:

  • -a En tiempo real, lista los procesos de todos los usuarios.
  • -u Lista información del usuario, Memoria y CPU.
  • -x Lista los procesos para las terminarles y su usuario.
  • -l Muestra información del UID y el valor nice.
  • -f Muestra los parámetros con los que inicio el proceso.
  • -e Muestra la información sobre todos los procesos del sistema.
  • -j Muestra información sobre el PGID y SID

Finalmente, en caso de que se desee finalizar algún proceso utilizamos el comando kill seguido del PID, este manda una señal al sistema para finalizar el proceso, por ejemplo:
{% highlight bash %}
[root@server1 ~]# kill 159156
{% endhighlight %}

En caso de que el proceso no se detenga podemos añadir la opción -9 (SIGKILL) al comando, esta opción obliga al sistema operativo a finalizar el proceso, ejemplo:
{% highlight bash %}
[root@server1 ~]# kill – 9 159156
{% endhighlight %}

Nota: Tome en cuenta que estas opciones puede traer repercusiones como recursos suspendidos o inconsistencias después de forzar la finalización de un proceso.

Como detectar procesos que hacen uso excesivo de CPU y RAM en Linux

Gerardo Arroyo Arce

CEO & Co-Founder

  • ​AWS Community Builder & Ambassador
  • ​AWS Solution Architect - Professional
  • AWS Certified Database – Specialty
  • AWS Certified Security – Specialty
  • AWS Solution Architect - Associate
  • AWS Certified Developer Associate
  • AWS Certified SysOps Administrator Associate
  • Ingeniero en Software. ITCR.
  • Master en Computación en Informática. UCR.