Quiero comparar cuánta memoria física y potencia de CPU usan Google Chrome y Firefox. Entonces intenté hacer esto con htop, que normalmente uso para realizar un seguimiento de los recursos de mi sistema, y descubrí que no puedo sacar una conclusión. He leído varios hilos pero todavía estoy confundido y esta es la razón: cuando filtro con F4, por ejemplo, Chrome, htop me muestra docenas de tareas para las cuales no sé si son hilos o procesos. Los subprocesos AFAIK comparten el mismo espacio de direcciones pero los procesos no. Puedo presionar F5 para tener una vista de árbol y hay un padre para todas las tareas. La suposición de que el valor de la tarea principal en la columna RES proporciona la memoria total y el valor en la columna CPU% el uso total de CPU para este programa, independientemente de si utiliza múltiples procesos o subprocesos, aparentemente es incorrecta. Lo descubrí haciendo este pequeño experimento: ejecuté un programa Python que encontré que usa multiprocesamiento para algunos cálculos. Esto es lo que vi en htop: el valor principal en la columna CPU% muestra 0 todo el tiempo pero hay 7 tareas que llegan al 100% (mi sistema tiene 4 núcleos físicos con 2 subprocesos cada uno).
Entonces, ¿alguien podría explicar qué está pasando y cómo puedo verificar el uso total de memoria física y CPU de un programa?
Por lo que he leído, no es sencillo determinar el uso exacto de la memoria, pero el valor absoluto no es importante en mi caso, solo necesito valores que pueda usar para comparar.
Respuesta1
Puedes usar este comando:
pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
O este (cambia $9 para elegir tu columna):
top -b -n1 | grep chrome | awk '{ SUM += $9} END { print SUM }'
Se pueden encontrar más comandos y consejos en:
Respuesta2
psgrep da un error:
$ pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
pgrep: only one pattern can be provided
Try `pgrep --help' for more information.
error: list of process IDs must follow -p
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
Puedo ver con htop la tarea principal del PID y hacer esto:
$ pgrep -P 1721 | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
1.2 2.6
pero el 1,2% de memoria parece demasiado bajo.
arriba no cuenta todo. Por ejemplo con: $ top -b -n1 | grep plano libre | awk '{ SUM += $9} END { print SUM }' Obtengo 0 porque solo recibe este comando: /usr/share/freeplane/freeplane.sh pero no este: /usr/sbin/java -Xmx512m - Dorg.freeplane
ps auxf parece contar todo y para Chrome obtengo esto:
$ ps auxf | grep chrome | awk '{ SUM += $4} END { print SUM }'
5.024G
lo que parece más realista. Aunque si mido la memoria usada con:
$ free -h
Antes y después de cerrar Chrome veo una diferencia de 2,4 Gi.
EDITAR: encontré ps_mem que hace que sea muy fácil verificar y comparar el uso de memoria de cada aplicación.