Linux: averigüe qué proceso está usando toda la RAM?

Pregunta:

Antes de preguntar, solo para ser claros: sí, sé sobre la caché de disco, y no, no es mi caso 🙂 Lo siento, por este preámbulo 🙂

Estoy usando CentOS 5. Todas las aplicaciones del sistema se intercambian mucho y el sistema es muy lento. Cuando hago free -m , esto es lo que obtuve:

             total       used       free     shared    buffers     cached
Mem:          3952       3929         22          0          1         18
-/+ buffers/cache:       3909         42
Swap:        16383         46      16337

Entonces, ¡en realidad solo tengo 42 Mb para usar! Por lo que tengo entendido, -/+ buffers/cache realidad no cuenta el caché del disco, por lo que de hecho solo tengo 42 Mb, ¿verdad? Pensé que podría estar equivocado, así que intenté desactivar el almacenamiento en caché del disco y no tuvo ningún efecto: la imagen seguía siendo la misma.

Entonces, decidí averiguar quién está usando toda mi RAM, y usé top para eso. Pero, aparentemente, informa que ningún proceso está usando mi RAM. El único proceso en mi parte superior es MySQL, pero usa 0.1% de RAM y 400Mb de intercambio. La misma imagen cuando trato de ejecutar otros servicios o aplicaciones: todos se intercambian, la top muestra que MEM no se usa (0.1% máximo para cualquier proceso).

top - 15:09:00 up  2:09,  2 users,  load average: 0.02, 0.16, 0.11
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4046868k total,  4001368k used,    45500k free,      748k buffers
Swap: 16777208k total,    68840k used, 16708368k free,    16632k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
 3214 ntp       15   0 23412 5044 3916 S  0.0  0.1   0:00.00  17m ntpd
 2319 root       5 -10 12648 4460 3184 S  0.0  0.1   0:00.00 8188 iscsid
 2168 root      RT   0 22120 3692 2848 S  0.0  0.1   0:00.00  17m multipathd
 5113 mysql     18   0  474m 2356  856 S  0.0  0.1   0:00.11 472m mysqld
 4106 root      34  19  251m 1944 1360 S  0.0  0.0   0:00.11 249m yum-updatesd
 4109 root      15   0 90152 1904 1772 S  0.0  0.0   0:00.18  86m sshd
 5175 root      15   0 90156 1896 1772 S  0.0  0.0   0:00.02  86m sshd

El reinicio no ayuda y, por cierto, es muy lento, lo que normalmente no esperaría en esta máquina (4 núcleos, 4Gb de RAM, RAID1).

Entonces, con eso, estoy bastante seguro de que esto no es un caché de disco, que está usando la RAM, porque normalmente debería haberse reducido y dejar que otros procesos usen RAM, en lugar de ir a intercambiar.

Entonces, finalmente, la pregunta es: ¿si alguien tiene alguna idea de cómo averiguar qué proceso está usando la memoria de manera tan intensa?

Respuesta:

En Linux, en el proceso top , puede presionar la tecla < para desplazar el orden de visualización de salida hacia la izquierda. De forma predeterminada, está ordenado por %CPU por lo que si presiona la tecla 4 veces, lo clasificará por VIRT que es el tamaño de la memoria virtual que le da su respuesta.

Otra forma de hacer esto es:

ps -e -o pid,vsz,comm= | sort -n -k 2

debería darle una salida ordenada por procesos de tamaño virtual.

Aquí está la versión larga:

ps --everyone --format=pid,vsz,comm= | sort --numeric-sort --key=2

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım