Linux: Uso de memoria por proceso

En este post veremos distintos métodos para obtener el uso de memoria RAM por proceso sobre sistemas operativos Linux.

Método1: Comando ps, ordenar por la columna pmem

ps aux --sort pmem

Ordena por uso de memoria RAM de menor a mayor en porcentaje.

El comando ps nos muestra los procesos que están funcionando en el momento en el equipo.

Los parámetros aux, significan:

a = Todos los procesos de todas las sesiones activas, no solo la actual.
u = Muestra el identificador del usuario (User ID).
x = Incluye las sesiones que no son TTY, por ejemplo las sesiones establecidas por SSH.

Con el parámetro --sort pmem ordenamos por uso de memoria.

Ejemplo de ejecución:

[root@LINUX1 ~]# ps aux --sort pmem
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  19360  1084 ?        Ss   Apr25   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Apr25   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Apr25   0:05 [migration/0]
root         4  0.0  0.0      0     0 ?        S    Apr25   0:03 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    Apr25   0:00 [migration/0]
root         6  0.0  0.0      0     0 ?        S    Apr25   0:01 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    Apr25   0:11 [migration/1]

Método2: Comando ps, utilizando pipes y filtros

Ordena por uso de memoria RAM de mayor a menor en porcentaje.

ps aux | awk '{print $2, $4, $11}' | sort -k2r | head -n 15

La salida de la ejecución de ps aux (parámetros explicados en el método anterior) es pasada el comando awk.

Con awk filtramos que muestre solo las columnas: 2, 4 y 11.

La salida es pasada el comando sort para ordenar. La columna de referencia para ordenar, será la segunda.

Finalmente, la salida es pasada al comando head para mostrar las primeras lineas, con el parámetro -n, indicamos el número de lineas a mostrar.

Ejemplo de ejecución:

[root@LINUX1 ~]# ps aux | awk '{print $2, $4, $11}' | sort -k2r | head -n 15
PID %MEM COMMAND
10967 1.8 drwebd.real
10968 1.8 drwebd.real
10969 1.8 drwebd.real
10970 1.8 drwebd.real
2192 1.8 drwebd.real
1935 1.0 /usr/libexec/mysqld
15463 0.8 /usr/sbin/httpd
15554 0.8 /usr/sbin/httpd
16160 0.8 /usr/sbin/httpd
13012 0.8 spamd
14487 0.7 /usr/sbin/httpd
14865 0.7 /usr/sbin/httpd
14929 0.7 /usr/sbin/httpd
15077 0.7 /usr/sbin/httpd

Método3: Con el comando top, podemos ordenar los procesos por uso de memoria RAM.

Si ejecutamos top y pulsamos la tecla "M" mayúscula, nos ordenará los procesos por uso de memoria RAM.

Otra opción, es ejecutar el comando top con el parámetro -a y directamente nos ordenará los procesos por uso de memoria RAM.

top -a

Vista ejecución:

Linux: Uso de memoria por proceso

5 comentarios:

  1. También puede resultar útil agrupar los resultados, para saber, por ejemplo con Chrome, cuánta memoria pillan todos los procesos... yo soy también de abrir mil terminales, y me gusta saber cuánta memoria pillan todos, y se puede hacer un pequeño script con awk (voy a darle una vuelta y lo publico).

    Eso sí, si quieres sacar sólo pid,memoria y comando, puedes hacerlo fácilmente con

    $ ps ax -o pid,pmem,cmd

    de hecho con el -o puedes especificar qué columnas quieres que saque ps, así te ahorras una llamada a awk y seguro que la llamada es más rápida :)

    ResponderEliminar
    Respuestas
    1. ¡Muchas gracias por tu aporte y por participar en el blog!

      ¡Un saludo!

      Xavi.

      Eliminar
  2. Muchas gracias por los tips, Gaspy ojala si puedes realizar el script

    ResponderEliminar
    Respuestas
    1. Al final me animé, bueno, entre ánimo y necesidad...

      http://totaki.com/poesiabinaria/2016/05/como-conocer-cpu-y-memoria-ocupada-por-un-grupo-de-procesos-con-el-mismo-nombre/

      Así, por ejemplo, podemos conocer la memoria y cpu ocupadas por todos los procesos httpd, php, chromium, o terminales abiertos de manera global, se pueden averiguar muchas cosas :)

      Eliminar
    2. ¡Muchas gracias Gaspar! Fantástico script, un gran trabajo!

      ¡Un abrazo!

      Xavi.

      Eliminar