Verifique o uso total de memória física e CPU para um programa no Linux

Verifique o uso total de memória física e CPU para um programa no Linux

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.

informação relacionada