Gravando um log de uso de CPU / RAM por um período de tempo para arquivar no CentOS

8

Estou procurando um aplicativo ou linha de código que permita observar um processo, salvar as informações em várias variáveis ​​e depois colocar as informações reunidas em um arquivo.

Eu tenho tentado com variações, topmas sem sorte. Estou executando vários servidores virtuais do CentOS, a VM é uma RAM de 2 GB, 2 processadores.

Um script que funciona durante um período especificado enquanto escreve linhas com as informações em um arquivo de texto, para que no final eu possa ter uma espécie de tabela com os dados funcionaria.

Vou fazer um teste de estresse no servidor e gostaria de ter os dados para fazer algumas estatísticas.

keponk
fonte

Respostas:

11

O padrão psé suficiente.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

resultado:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

O primeiro campo é o uso da CPU em%, o segundo é o uso da memória física em kbytes.

whitequark
fonte
isso é perfeito, eu já tinha feito um longo script para limpar todos os dados de uma saída de lote superior, mas a maneira mais simples e eficaz de apreciar muito, obrigado!
91110 keponk
no final eu continuei usando meu script, uma vez ps me dá a média de carga que normalmente é igual a CPU%, mas não é uma regra, mais informações deste em um google busca rápida
keponk
1
A% CPU aqui não é a% usada no intervalo, mas a porcentagem média em todo o tempo de execução do programa. Eu acredito que isso é enganoso.
Will Sewell
2

Se você se importa com o tempo preciso e deseja a CPU em porcentagem:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'
Aalex Gabi
fonte
1

Eu sugeriria sadc/ sar.

Pausado até novo aviso.
fonte
Não é apenas em todo o sistema?
whitequark
@whitequark: Depende da versão do sar. Algumas versões usam sar -x PIDoutros pidstat -p PID.
Pausado até novo aviso.
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
precisa saber é
0

Você está tentando observar quanto tempo de CPU um processo específico requer.

Eu ia sugerir a ferramenta de estatística da CPU para o CentOS? mas isso é válido para todo o sistema, não apenas para um processo.

Qualquer processo mostrará o tempo da CPU na saída do ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 são horas / minutos / segundos de CPU. Acumulará.
  • Você precisará de permissões para ver isso se o usuário não for você.
  • Quando esse valor fica acima de um dia, o formato muda; acima de 2 dias. Sua rotina de análise terá que lidar com isso.

Neste ponto, analise a saída com o Python, trabalhe com algumas matemáticas de datas e você estará pronto.

Kevin J. Rice
fonte
0

O comando a seguir obtém a média do uso da CPU e da memória a cada 40 segundos para um processo específico (pid)

pidstat 40 -ru -p <pid>

Saída para o meu caso (duas primeiras linhas para uso da CPU, duas primeiras linhas para memória):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java
Celik
fonte