Tengo un servidor con 12G de memoria. A continuación se muestra un fragmento de la parte superior:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
El free -mmuestra lo siguiente:
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
Si entiendo correctamente, el sistema tiene solo 362 MB de memoria disponible. Mi pregunta es: ¿cómo puedo saber qué proceso consume la mayor parte de la memoria?
Al igual que la información de fondo, el sistema se está ejecutando 64bit OpenSuse 12.

Respuestas:
Primero, repita este mantra por un momento: "memoria no utilizada es memoria desperdiciada". El kernel de Linux mantiene grandes cantidades de metadatos de archivos y archivos que se solicitaron, hasta que algo que parece más importante elimina esos datos. Es por eso que puedes correr:
y que la segunda
findinstancia se ejecute a una velocidad ridícula.Linux solo deja un poco de memoria 'libre' para manejar los picos en el uso de la memoria sin demasiado esfuerzo.
Segundo, quieres encontrar los procesos que están consumiendo toda tu memoria; en
topuso elMcomando para ordenar por uso de memoria. Siéntase libre de ignorar laVIRTcolumna, que solo le indica cuánta memoria virtual se ha asignado, no cuánta memoria está usando el proceso.RESinforma la cantidad de memoria residente , o actualmente en ram (en lugar de intercambiada a disco o nunca asignada realmente en primer lugar, a pesar de ser solicitada).Pero, dado
RESque contará, por ejemplo, la/lib/libc.so.6memoria una vez para casi todos los procesos, no es exactamente una medida asombrosa de cuánta memoria está usando un proceso. LaSHRcolumna informa cuánta memoria se comparte con otros procesos, pero no hay garantía de que otro proceso esté realmente compartiendo; podría ser compartible, simplemente nadie más quiere compartir.La
smemherramienta está diseñada para ayudar a los usuarios a medir mejor cuánta memoria debería realmente atribuirse a cada proceso individual. Hace un trabajo inteligente para descubrir lo que es realmente único, lo que se comparte, y da proporcionalmente la memoria compartida a los procesos que la comparten.smempuede ayudarlo a comprender hacia dónde va su memoria mejor detoplo que lo hará, perotopes una excelente primera herramienta.fuente
/proc/meminfoy/proc/slabinfoarchivos detalle lo que el kernel está utilizando el almacenamiento para - elslabtopprograma es muy parecidotop, pero muestra cuál de los asignadores de losa han asignado la cantidad, lo que sus proporciones son similares, etc.use un consejo rápido usando el comando top en linux / unix
y luego presione Shift+ m(es decir, escriba una mayúscula
M).De
man topO alternativamente: presione Shift+ f, luego elija la pantalla para ordenar por uso de memoria npresionando la tecla y luego presione Enter. Verá el proceso activo ordenado por uso de memoria
fuente
M(Shift+m)top -o mem -O cputop -o RESotra manera "nombre de campo no reconocido 'mem'"(Agregando -n indicador numérico para ordenar el comando).
fuente
ps aux --sort '%mem'lo explicado en mi respuestaPrimero debe leer una explicación sobre la salida de
free. En pocas palabras: tiene al menos 10.7 GB de memoria fácilmente utilizable por los procesos.Luego debe definir qué es el "uso de memoria" para un proceso (no es fácil ni inequívoco, créanme).
Entonces podríamos ayudar más :-)
fuente
Enumerar y ordenar procesos por uso de memoria:
fuente
ps -e -orss=,args= | sort -nr | headps aux --sort '%mem'desde procps 'ps (predeterminado en Ubuntu 12.04) genera resultados como:
Así que aquí Firefox es el principal consumidor con el 16% de mi memoria.
Usted también podría estar interesado en:
fuente
puede especificar por qué columna ordenar, con los siguientes pasos:
pasos: * parte superior * shift + F * seleccione una columna de la lista por ejemplo, n significa ordenar por memoria, * presione enter * Okayfuente
Puede ver el uso de la memoria ejecutando este código en su terminal:
fuente
Cómo totalizar la memoria usada por nombre de proceso:
A veces, incluso mirando los procesos individuales más grandes, todavía hay una gran cantidad de memoria usada que no se tiene en cuenta. Para verificar si hay muchos de los mismos procesos más pequeños que usan la memoria, puede usar un comando como el siguiente que usa awk para resumir la memoria total utilizada por los procesos del mismo nombre:
por ejemplo, salida
fuente
Esta muy segunda en el tiempo
Actualización continua
También agregué algunas golosinas aquí que podría apreciar (o podría ignorar)
-n 1mira y actualiza cada segundo-U $(whoami)Para mostrar solo sus procesos. $ (algún comando) evalúa ahora| head -n4Para mostrar solo el encabezado y los 3 procesos a la vez a menudo, solo necesita líneas de pedido de alto uso${1-4}dice mi primer argumento$1Quiero que el valor predeterminado sea 4, a menos que lo proporcioneSi está utilizando una Mac, es posible que deba instalar watch first brew install watch
Alternativamente, puede usar una función
fuente
-ma-rTienes este comando simple:
fuente