No comando 'top' do Linux, existe alguma maneira de controlar os valores?

4

Estou usando o comando "top" do Linux para monitorar% de CPU de um determinado processo. Como os valores continuam mudando a cada poucos segundos, existe alguma maneira de rastrear os valores em um arquivo separado ou como uma representação gráfica? É possível fazer isso usando algum script de shell?

    
por Thiripu 29.04.2015 / 08:39

2 respostas

7

A resposta a essa pergunta pode variar de um comando simples a ferramentas de monitoramento complexas, dependendo de suas necessidades.

Você pode começar simplesmente executando top -b -n 1 >> file.txt (-b para o modo batch, -n 1 para executar uma única iteração do topo) e armazenar a saída (anexada) no arquivo.txt. Você também pode filtrar a saída "superior" como top -b -n 1 | grep init para ver apenas os dados do processo "init" ou top -b -n 1 | grep "init" | head -1 |awk '{print $9}' para obter a 9ª coluna dos dados do processo init (o valor da CPU).

Se você quiser usar um script de shell, poderá:

CPU=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9}')
MEM=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $10}')

Ou, com uma única execução do topo:

read CPU MEM <<<$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9 " " $10}')

(note que grep, head e awk podem ser mesclados em um único comando awk, mas para a simplicidade estou usando comandos separados).

Usamos a parte superior neste exemplo, mas há métodos alternativos para outras métricas (verifique sar , iostat , vmstat , iotop , ftop e até mesmo leitura / proc / *).

Agora você tem uma maneira de acessar os dados (uso da CPU). E no nosso exemplo, estamos anexando a um arquivo de texto. Mas você pode usar outras ferramentas para armazenar os dados e até graficá-los: armazenar em csv e gráfico com gnuplot / python / openoffice, usar ferramentas de monitoramento como zabbix, rrdtools, cactos, etc. Existe um grande mundo de ferramentas de monitoramento que permite coletar e representar graficamente os dados, como uso da CPU, uso de memória, disco io e até mesmo métricas personalizadas (número de conexões mysql, etc).

EDIT: finalmente, para responder especificamente à sua pergunta, se você quiser acompanhar as alterações facilmente para um teste simples, você pode executar top -b -n 1 >> /tmp/file.txt no seu arquivo / etc / crontab, executando top a cada 5 minutos (ou qualquer outro intervalo de tempo se você substituir o / 5 abaixo).

0-59/5 * * * * root top -b -n1 >>/tmp/output.txt

(e um grep + head -1 no comando acima, se você estiver intimidado apenas em um único processo).

Note que o output.txt irá crescer, então se você quiser redefini-lo diariamente ou semanalmente, você pode "rm" com outra entrada crontab.

    
por 29.04.2015 / 09:07
1

Você pode usar ps -o pid,pcpu $(pgrep particular-process) >> file . Execute-o em um intervalo regular.

    
por 29.04.2015 / 10:14