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 -m
muestra 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
find
instancia 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
top
uso elM
comando para ordenar por uso de memoria. Siéntase libre de ignorar laVIRT
columna, que solo le indica cuánta memoria virtual se ha asignado, no cuánta memoria está usando el proceso.RES
informa 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
RES
que contará, por ejemplo, la/lib/libc.so.6
memoria una vez para casi todos los procesos, no es exactamente una medida asombrosa de cuánta memoria está usando un proceso. LaSHR
columna 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
smem
herramienta 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.smem
puede ayudarlo a comprender hacia dónde va su memoria mejor detop
lo que lo hará, perotop
es una excelente primera herramienta.fuente
/proc/meminfo
y/proc/slabinfo
archivos detalle lo que el kernel está utilizando el almacenamiento para - elslabtop
programa 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 top
O 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 cpu
top -o RES
otra 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 | head
ps 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:
fuente
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 1
mira y actualiza cada segundo-U $(whoami)
Para mostrar solo sus procesos. $ (algún comando) evalúa ahora| head -n4
Para 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$1
Quiero 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
-m
a-r
Tienes este comando simple:
fuente