De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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.
Error: No site found with the domain 's2.dicas-l.com.br' (Learn more)