Quero comparar quanta memória física e potência da CPU o Google Chrome e o Firefox usam. Então tentei fazer isso com o htop que costumo usar para controlar os recursos do meu sistema e descobri que não consigo tirar uma conclusão. Eu li vários tópicos, mas ainda estou confuso e é por isso: Quando filtro com F4, por exemplo, chrome, o htop me mostra dezenas de tarefas para as quais não sei se são threads ou processos. Os threads AFAIK compartilham o mesmo espaço de endereço, mas não processam. Posso pressionar F5 para ter uma visualização em árvore e há um pai para todas as tarefas. A suposição de que o valor da tarefa pai na coluna RES fornece a memória total e o valor na coluna CPU% o uso total da CPU para este programa, independentemente de ele usar vários processos ou threads, está aparentemente errada. Descobri isso fazendo este pequeno experimento: executei um programa python que usa multiprocessamento para alguns cálculos. Isto é o que vi no htop: o valor pai na coluna CPU% mostra 0 o tempo todo, mas há 7 tarefas que vão até 100% (meu sistema tem 4 núcleos físicos com 2 threads cada).
Alguém poderia explicar o que está acontecendo e como posso verificar o uso total de memória física e CPU de um programa?
Pelo que li, não é fácil determinar o uso exato da memória, mas o valor absoluto não é importante no meu caso, só preciso de valores que possa usar para comparação.
Responder1
Você pode usar este comando:
pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
Ou este (troque $ 9 para escolher sua coluna):
top -b -n1 | grep chrome | awk '{ SUM += $9} END { print SUM }'
Mais comandos e conselhos podem ser encontrados em:
Responder2
psgrep dá um erro:
$ 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).
Posso ver com htop a tarefa pai do PID e fazer o seguinte:
$ pgrep -P 1721 | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
1.2 2.6
mas 1,2% de memória parece muito baixo.
top não conta tudo. Por exemplo, com: $ top -b -n1 | grep avião livre | awk '{SUM += $9} END { print SUM }' Estou recebendo 0 porque ele recebe apenas este comando: /usr/share/freeplane/freeplane.sh mas não este: /usr/sbin/java -Xmx512m - Dorg.freeplane
ps auxf parece contar tudo e para o chrome estou conseguindo isso:
$ ps auxf | grep chrome | awk '{ SUM += $4} END { print SUM }'
5.024G
o que parece ser mais realista. Embora se eu medir a memória usada com:
$ free -h
antes e depois de fechar o Chrome, vejo uma diferença de 2,4Gi.
EDIT: encontrei ps_mem que facilita muito a verificação e comparação do uso de memória de cada aplicativo.