linux - tengo - ¿Cómo ver los procesos principales ordenados por el uso de memoria real?
ver procesos que consumen mas memoria aix (8)
Listar y ordenar los procesos por uso de memoria:
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
Tengo un servidor con 12G de memoria. Un fragmento de la parte superior se muestra a continuación:
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 ejecuta 64bit OpenSuse 12
.
Primero debes leer una explicación sobre la salida de forma 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, confíe en mí).
Entonces podríamos ayudar más :-)
Primero, repita este mantra por un momento: "la 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:
find /home -type f -name ''*.mp3''
find /home -type f -name ''*.aac''
y haz que la segunda instancia de find
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 comiendo toda tu memoria; en la top
use el comando M
para ordenar por uso de memoria. Siéntase libre de ignorar la columna VIRT
, que solo le dice cuánta memoria virtual se ha asignado, no cuánta memoria está usando el proceso. RES
informa de cuánta memoria reside , o está actualmente en RAM (en lugar de intercambiarse en disco o en realidad nunca se asignó, a pesar de haber sido solicitada).
Pero, dado que RES
contará, por ejemplo, la memoria /lib/libc.so.6
una vez para casi todos los procesos, no es exactamente una medida asombrosa de cuánta memoria está usando un proceso. La columna SHR
informa cuánta memoria se comparte con otros procesos, pero no hay garantía de que otro proceso realmente se esté compartiendo; podría compartirse, pero nadie más quiere compartirla.
La herramienta smem
está diseñada para ayudar a los usuarios a smem
mejor la cantidad de memoria que realmente debe atribuirse a cada proceso individual. Hace un trabajo inteligente para descubrir qué es realmente único, qué se comparte y proporcionalmente compara la memoria compartida con los procesos que la comparten. smem
puede ayudarlo a comprender a dónde va mejor su memoria que la top
, pero top
es una excelente primera herramienta.
Puede especificar qué columna ordenar, con los siguientes pasos:
steps: * top * shift + F * select a column from the list e.g. n means sort by memory, * press enter * ok
Puede ver el uso de la memoria ejecutando este código en su terminal:
$ watch -n2 free -m
$ htop
Usa la punta rápida usando el comando top en linux / unix
$ top
y luego presiona Shift + m (es decir, escribe una M
mayúscula).
De man top
SORTING of task window
For compatibility, this top supports most of the former top sort keys.
Since this is primarily a service to former top users, these commands do
not appear on any help screen.
command sorted-field supported
A start time (non-display) No
M %MEM Yes
N PID Yes
P %CPU Yes
T TIME+ Yes
O alternativamente: presione Shift + f , luego elija la pantalla para ordenar por el uso de la memoria presionando la tecla n y luego presione Enter . Verás un proceso activo ordenado por el uso de la memoria.
ps aux --sort ''%mem''
desde procps ''ps (por defecto en Ubuntu 12.04) genera una salida como:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
tomcat7 3658 0.1 3.3 1782792 124692 ? Sl 10:12 0:25 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -D
root 1284 1.5 3.7 452692 142796 tty7 Ssl+ 10:11 3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
ciro 2286 0.3 3.8 1316000 143312 ? Sl 10:11 0:49 compiz
ciro 5150 0.0 4.4 660620 168488 pts/0 Sl+ 11:01 0:08 unicorn_rails worker[1] -p 3000 -E development -c config/unicorn.rb
ciro 5147 0.0 4.5 660556 170920 pts/0 Sl+ 11:01 0:08 unicorn_rails worker[0] -p 3000 -E development -c config/unicorn.rb
ciro 5142 0.1 6.3 2581944 239408 pts/0 Sl+ 11:01 0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]
ciro 2386 3.6 16.0 1752740 605372 ? Sl 10:11 7:38 /usr/lib/firefox/firefox
Así que aquí Firefox es el principal consumidor con el 16% de mi memoria.
Usted también podría estar interesado en:
ps aux --sort ''%cpu''
ps aux | awk ''{print $2, $4, $11}'' | sort -k2rn | head -n 10
(Agregando el indicador numérico -n para ordenar el comando).