Puedo ver la lista de todos los procesos y la memoria a través de
ps aux
y pasando por VSZ y RSS
¿Hay alguna manera de ordenar la salida de este comando por orden descendente en el valor RSS?
--sort
están aquí: alvinalexander.com/linux/…
Puedo ver la lista de todos los procesos y la memoria a través de
ps aux
y pasando por VSZ y RSS
¿Hay alguna manera de ordenar la salida de este comando por orden descendente en el valor RSS?
--sort
están aquí: alvinalexander.com/linux/…
Respuestas:
Use el siguiente comando:
ps aux --sort -rss
Consulte aquí para obtener más uso de la memoria de proceso de Linux
head
comops aux --sort -rss | head -n15
ps: illegal option -- -
ps aux --sort=rss
:?
ps aux | sort -rn -k 6
Un método rápido y sucio es simplemente canalizar la salida de ps aux
la sort
orden:
$ ps aux | sort -rn -k 5,6
$ ps aux | sort -rn -k 5,6
...
root 1584 0.0 0.0 22540 1236 ? S 07:04 0:01 hald-addon-storage: polling /dev/sr0 (every 2 sec)
root 1575 0.0 0.0 22536 872 ? S 07:04 0:00 /usr/libexec/hald-addon-generic-backlight
root 1574 0.0 0.0 22536 880 ? S 07:04 0:00 /usr/libexec/hald-addon-leds
root 1565 0.0 0.0 22536 876 ? S 07:04 0:00 /usr/libexec/hald-addon-rfkill-killswitch
saml 2507 0.0 0.0 22232 500 ? S 07:05 0:00 dbus-launch --sh-syntax --exit-with-session
root 1671 0.0 0.0 22156 936 ? Ss 07:04 0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
...
Esto no se maneja para los encabezados de columna que se mezclan con la salida, pero es fácil de recordar en la línea de comando, y es una forma aceptable de hacer lo que desea al ver manualmente este tipo de salida.
root 1791 0.0 0.0 4140 536 tty2 Ss+ 07:04 0:00 /sbin/mingetty /dev/tty2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 996 0.0 0.0 0 0 ? S 07:04 0:01 [kdmflush]
root 982 0.0 0.0 0 0 ? S 07:04 0:00 [kvm-irqfd-clean]
Un consejo adicional sería canalizar toda la salida a otro comando como less
. Esto le permite ver la información página por página y también usar las teclas de flecha y las teclas de página arriba / abajo para desplazarse hacia adelante y hacia atrás a través de la salida.
$ ps aux | sort -rn -k 5,6 | less
Si su salida se ajusta mucho, también puede utilizar el -S
interruptor a menos, lo que obligará a toda la salida a permanecer en una sola línea. Luego puede usar las teclas de flecha para moverse hacia la izquierda / derecha / arriba / abajo para verlo todo.
$ ps aux | sort -rn -k 5,6 | less -S
Ciertas versiones de ps
proporcionan la capacidad de uso --sort
. Este interruptor puede tomar teclas que tienen el prefijo a +
o a -
para indicar el orden de clasificación ... de menor a mayor o de mayor a menor.
vsz, -rss
$ ps aux --sort=vsz,-rss | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 07:03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:03 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 07:03 0:01 [migration/0]
root 5 0.0 0.0 0 0 ? S 07:03 0:00 [watchdog/0]
+ vsz, + rss
$ ps aux --sort=+vsz,+rss | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 07:03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:03 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 07:03 0:01 [migration/0]
root 5 0.0 0.0 0 0 ? S 07:03 0:00 [watchdog/0]
-vsz, -rss
$ ps aux --sort=-vsz,-rss | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1832 0.0 0.0 2088924 3312 ? Sl 07:04 0:00 /usr/sbin/console-kit-daemon --no-daemon
saml 3517 0.2 1.2 2073196 100492 ? Sl 07:06 0:34 /home/saml/.dropbox-dist/dropbox
saml 3516 0.0 0.8 2071032 67388 ? Sl 07:06 0:07 /home/saml/.dropbox-dist/dropbox
saml 2657 0.1 0.7 1580936 57788 ? Sl 07:05 0:27 nautilus
ps
siempre generará las columnas de la forma en que espera sort
verlas / procesarlas?
... | less
es un buen consejo, pero a veces su proceso tiene una línea de comando enorme y satura la salida. En tales casos ... | less -S
funciona mejor.
-S
trunca y, por lo tanto, puedes perder algo de lo que quieres ver, pero de lo contrario, es un buen consejo si solo te interesan las columnas de la izquierda.
less -S
. Cuando cierra la less
vista, todo desaparece, pero mientras esté en la vista, puede desplazarse verticalmente pero también horizontalmente. Sin embargo, copiar puede ser difícil.
ps aux --sort -rss es bueno:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 5984 0.8 7.4 1632488 296056 ? Sl 06:30 6:18 /usr/lib/chromium-browser/chromium-browser --type=ren
user 23934 21.7 6.0 1565600 241228 ? Sl 15:45 40:10 /opt/atom/atom --type=renderer --enable-experimental-
user 5533 0.9 5.1 3154096 206376 ? SLl 06:30 6:47 /usr/lib/chromium-browser/chromium-browser --enable-p
user 17306 1.7 4.9 1360648 196124 ? Sl 18:14 0:36 /usr/lib/chromium-browser/chromium-browser --type=ren
user 22272 30.1 4.6 1347784 185032 ? Sl 18:43 1:54 /usr/lib/chromium-browser/chromium-browser --type=ren
user 19318 0.6 3.3 1304324 133452 ? Sl 18:27 0:09 /usr/lib/chromium-browser/chromium-browser --type=ren
user 22098 1.0 3.3 1298500 133216 ? Sl 18:43 0:04 /usr/lib/chromium-browser/chromium-browser --type=ren
pero si desea ver los usos de memoria y CPU por aplicación (agrupados por comandos):
python3.6 sum_process_resources.py
==== CPU% ====
0. /opt/atom/atom | 27.8
1. /usr/lib/chromium-browser/chromium-browser | 11.2
2. python3.6 | 11.0
3. /opt/google/chrome/chrome | 1.6
4. /usr/lib/xorg/Xorg | 1.4
5. /opt/Franz/franz | 0.7
==== MEM% ====
0. /usr/lib/chromium-browser/chromium-browser | 37.2
1. /opt/google/chrome/chrome | 11.3
2. /opt/Franz/franz | 10.6
3. /opt/atom/atom | 10.1
4. /usr/lib/xorg/Xorg | 2.0
5. com.google.android.gms.persistent | 1.4
==== RSS MB ====
0. /usr/lib/chromium-browser/chromium-browser | 1475.07 MB
1. /opt/google/chrome/chrome | 461.35 MB
2. /opt/Franz/franz | 429.04 MB
3. /opt/atom/atom | 402.18 MB
4. /usr/lib/xorg/Xorg | 78.53 MB
5. com.google.android.gms.persistent | 58.02 MB
código:
#sum_process_resources.py
from collections import OrderedDict
import subprocess
def run_cmd(cmd_string):
"""Runs commands and saves output to variable"""
cmd_list = cmd_string.split(" ")
popen_obj = subprocess.Popen(cmd_list, stdout=subprocess.PIPE)
output = popen_obj.stdout.read()
output = output.decode("utf8")
return output
def sum_process_resources():
"""Sums top X cpu and memory usages grouped by processes"""
ps_memory, ps_cpu, ps_rss = {}, {}, {}
top = 6
output = run_cmd('ps aux').split("\n")
for i, line in enumerate(output):
cleaned_list = " ".join(line.split())
line_list = cleaned_list.split(" ")
if i > 0 and len(line_list) > 10:
cpu = float(line_list[2])
memory = float(line_list[3])
rss = float(line_list[5])
command = line_list[10]
ps_cpu[command] = round(ps_cpu.get(command, 0) + cpu, 2)
ps_memory[command] = round(ps_memory.get(command, 0) + memory, 2)
ps_rss[command] = round(ps_rss.get(command, 0) + rss, 2)
sorted_cpu = OrderedDict(sorted(ps_cpu.items(), key=lambda x: x[1], reverse=True))
sorted_memory = OrderedDict(sorted(ps_memory.items(), key=lambda x: x[1], reverse=True))
sorted_rss = OrderedDict(sorted(ps_rss.items(), key=lambda x: x[1], reverse=True))
print("==== CPU% ====")
for i, k in enumerate(sorted_cpu.items()):
if i < top:
print("{}. {} | {}".format(i, k[0], k[1]))
print("==== MEM% ====")
for i, k in enumerate(sorted_memory.items()):
if i < top:
print("{}. {} | {}".format(i, k[0], k[1]))
print("==== RSS MB ====")
for i, k in enumerate(sorted_rss.items()):
if i < top:
print("{}. {} | {} MB".format(i, k[0], round((k[1]/1024), 2)))
if __name__ == '__main__':
sum_process_resources()
Como alternativa a los argumentos de estilo BSD que se muestran en las otras respuestas, uno puede usar (al menos usando procps, enviados por Debian y Ubuntu):
ps -eF --sort=-rss
Cómo totalizar la memoria usada por nombre de proceso:
A veces, incluso observando los procesos individuales más grandes, todavía hay mucha 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:
ps -e -orss=,args= |awk '{print $1 " " $2 }'| awk '{tot[$2]+=$1;count[$2]++} END {for (i in tot) {print tot[i],i,count[i]}}' | sort -n
por ejemplo, salida
9344 docker 1
9948 nginx: 4
22500 /usr/sbin/NetworkManager 1
24704 sleep 69
26436 /usr/sbin/sshd 15
34828 -bash 19
39268 sshd: 10
58384 /bin/su 28
59876 /bin/ksh 29
73408 /usr/bin/python 2
78176 /usr/bin/dockerd 1
134396 /bin/sh 84
5407132 bin/naughty_small_proc 1432
28061916 /usr/local/jdk/bin/java 7
ps