Antes de preguntar, para ser claros: sí, sé sobre caché de disco, y no, no es mi caso :) Lo siento, por este preámbulo :)
Estoy usando CentOS 5. Cada aplicación en el sistema está intercambiando mucho, y el sistema es muy lento. Cuando lo 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 entiendo, en -/+ buffers/cache
realidad no cuenta el caché del disco, por lo que 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 lo usé top
para eso. Pero, aparentemente, informa que ningún proceso está usando mi RAM. El único proceso en mi cima es MySQL, pero está usando 0.1% de RAM y 400Mb de intercambio. La misma imagen cuando intento ejecutar otros servicios o aplicaciones: todos se intercambian, 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
Reiniciar no ayuda y, por cierto, es muy lento, lo que normalmente no esperaría en esta máquina (4 núcleos, 4 Gb de RAM, RAID1).
Entonces, con eso, estoy bastante seguro de que este no es un caché de disco, que está usando la RAM, porque normalmente debería haberse reducido y permitir 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 realmente está usando la memoria tanto?
fuente
irc.freenode.org
. Creé una sala de chat para una discusión extendida aquí .free -m
, pero su tamaño puede consultarse en Linux concat /proc/spl/kstat/zfs/arcstats | grep data_size
.Respuestas:
En Linux en el
top
proceso, puede presionar la<
tecla para cambiar el orden de visualización de salida a la izquierda. Por defecto, está ordenado por%CPU
lo que si presiona la tecla 4 veces, lo ordenará segúnVIRT
el tamaño de la memoria virtual y le dará su respuesta.Otra forma de hacer esto es:
debería darle una salida ordenada por procesos y tamaño virtual.
Aquí está la versión larga:
fuente
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
en el servidor Ubuntu 11.10.-o
opciones. RHEL4 esto funciona. RHEL5:ps -e -o pid,vsz,comm= | sort -n -k 2
funciona. Intentaré 11.10 más tarde esta noche, pero si encuentras las opciones de clasificación correctas antes, házmelo saber.ps -e -o pid,vsz,comm | sort -n -k 2
podría funcionar, pero no tengo un lugar para verificar en este momento.-ef
opción. Pero esto parece producir resultados razonables:sudo ps axo pid,vsz,comm=|sort -n -k 2
<
que no sabía que era posible, fedoraps -e --format=pid,rss,args | sort --numeric-sort --key=2
Muestra la memoria de procesos en megabytes y la ruta del proceso.
fuente
Solo una nota al margen en un servidor que muestra los mismos síntomas pero aún muestra agotamiento de la memoria. Lo que terminó por encontrar fue un sysctl.conf de una caja con 32 GB de RAM y la configuración para una base de datos con grandes páginas configuradas en 12000. Esta caja solo tiene 2 GB de RAM, por lo que estaba asignando toda la RAM libre a las grandes páginas (solo 960 de ellos). Establecer páginas enormes en 10, ya que ninguna se usó de todos modos, liberó toda la memoria.
Una comprobación rápida de / proc / meminfo para buscar la configuración de HugePages_ puede ser un buen comienzo para solucionar al menos un problema inesperado de memoria.
fuente
En mi caso, el problema era que el servidor era un servidor virtual VMware con el
vmw_balloon
módulo habilitado:Corriendo:
Entonces, de hecho, el host recuperó alrededor de 5 GB de memoria. Entonces, a pesar de tener 8 GB para mi VM "oficialmente", en la práctica era mucho menos:
fuente
También puede usar el comando ps para obtener más información sobre el proceso.
fuente
¿Hago referencia a esto y a la memoria total utilizada por el proceso de Python? - Stack Overflow , esa es mi respuesta. Ahora obtengo una herramienta de recuento de proceso específico (python).
Adjunte mi lista de procesos.
Referencia
fuente
Haz un script llamado
show-memory-usage.sh
con contenido:fuente
Esto también toma la identificación del proceso, ordena por MB utilizado y describe el comando (que creó el proceso):
ps aux | awk '{print $6/1024 " MB\t\t" $2 "\t" $11}' | sort -n
fuente
Mi servidor ubuntu DISTRIB RELEASE = 18.04 en Hyper-V tenía la mayor parte de la memoria utilizada, pero todos los procesos estaban bien. (Admití que eliminé los paquetes snapd y desatendido-upgr, pero todavía se usó el 95% de la memoria).
La respuesta es que Hyper-V tiene memoria dinámica, por lo que tomó memoria para el uso del sistema principal y ubuntu lo marcó como usado.
Espero que ayude a alguien.
fuente