você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Analisando a carga de um processo através de gráficos, em shell script!

Colaboração: Pedro R. Bomente Filho

Data de Publicação: 15 de Outubro de 2009

Algumas vezes me deparei com dúvidas relacionadas à carga de CPU que determinado processo tem exigido. Muitas vezes quando testamos algum novo software essa dúvida é iminente. Uma outra situação comum é quando precisamos escolher entre dois softwares e não existe um review sobre os mesmos na rede.

Diante essa necessidade, surgiu-me a ideia de monitorar determinado processo de tempos em tempos para sanar minhas intrigas quanto ao gasto de CPU. Para isso, criei um script o qual tem a finalidade de gerar resultados em um arquivo *.csv. A partir daí, seria fácil manipular os dados. Posteriormente, aprimorando o script recém nascido, pensei: "Por que não criar um gráfico também?!".

Nesse contexto, desenvolvi um script que me foi muito útil. Lá vai!

Inicializações de variáveis:

I='0'
# O PID do processo vem como parâmetro 1
PID=$1
# O tempo pelo qual o script vai analisar o processo vem como parâmetro 2
let TEMPO="$2 * 6"
CSV="/tmp/dadosVerificaProcesso`echo $PID`.CSV"
GRAFICO="/tmp/grafico`echo $PID`.png"

Gerando o arquivo *.csv:

while [ "$I" -lt "$TEMPO" ]; do
ps aux | grep $PID > /tmp/verificaProcesso`echo $PID`.tmp
      while read linha; do
              if [ `echo $linha | awk -F" " '{print $2}'` = "$PID" ];then
                      CPU=$(echo $linha | awk -F" " '{ print $3}')
                      # pode-se também gerar gráficos referentes ao uso de memória
                      mem=$(echo $linha | awk -F" " '{print $4}')
                      echo "$i $CPU" >> /tmp/dadosVerificaProcesso`echo $PID`.CSV
              fi
      done < /tmp/verificaProcesso`echo $PID`.tmp
      sleep 10
      let I="$I + 1"
done

Montando o gráfico utilizando o gnuplot:

echo "set terminal png size 400,300" > /tmp/gnuplot`echo $PID`.tmp
echo "set output '$GRAFICO'" >> /tmp/gnuplot`echo $PID`.tmp
echo "set grid y" >> /tmp/gnuplot`echo $PID`.tmp
echo "set title 'Analise Processo $PID'" >> /tmp/gnuplot`echo $PID`.tmp
echo "set ylabel '%CPU'" >> /tmp/gnuplot`echo $PID`.tmp
echo "set xlabel 'tempo'" >> /tmp/gnuplot`echo $PID`.tmp
echo "plot '$CSV' t'' with lines" >> /tmp/gnuplot`echo $PID`.tmp
gnuplot /tmp/gnuplot`echo $PID`.tmp

A patir daí você pode abrir o gráfico de qualquer computador. Por exemplo analisar determinado processo em um servidor remoto, o script poderia enviar o gráfico por e-mail ao fim do processo.

Pedro R. Bomente Filho é Pesquisador no Laboratório de Pesquisa em Segurança de Redes e Computadores ACME! - IBILCE/UNESP.


Veja a relação completa dos artigos de Pedro R. Bomente Filho