PS com gráficos por processo
Publicado por Pedro Robson Leão (última atualização em 21/10/2009)
[ Hits: 6.346 ]
Executa monitoração de um determinado processo e gera um gráfico para análise. Utiliza gnuplot e imagemagick.
Boa alternativa para monitoração de um determinado processo.
#!/bin/bash
# psChart
# baseado em http://www.dicas-l.com.br/dicas-l/20091015.php
#
# by Pedro Robson Leao
#
# Dependencas: gnuplot, display, convert
#::::::::::::::
#abc.csv
#::::::::::::::
#5 30
#10 28.5
#20 3
#25 15
#30 17.5
#::::::::::::::
#abc.plot
#::::::::::::::
#set terminal png size 400,300
#set output 'abc.png'
#set grid y
#set title 'TESTE'
#set ylabel 'Y'
#set xlabel 'X'
#plot 'abc.csv' t'' with lines
# Variaveis SVN
SVN_REVISION='$Revision: 17854 $'
SVN_LASTCHANGE='$Date: 2009-04-13 19:38:52 -0300 (Mon, 13 Apr 2009) $'
VERSION="pscht v1.0.0 (19/10/2009)";
function usage() {
printf "Use: ${PRG} <option,...> PID\n\n\t--help\n\t--time [seconds]\n\t--interval [seconds]\n\t--version\n\n";
printf "Default:\n\ttime = ${TIME}\n\tinterval = ${INTERVAL}\n"
}
function showVersion() {
echo "Version: ${VERSION}";
echo "$SVN_REVISION" | awk '{printf("Svn Revision: %s\n", $2);}';
echo "$SVN_LASTCHANGE" | awk '{printf("Svn Date: %s %s %s\n", $2, $3, $4);}';
echo;
}
PRG=${0};
BASEPRG="$( basename ${PRG} .sh )";
TIME=60; #tempo default 60 segundos
INTERVAL=5; #intervalo defalt 5 segundos
#CMD="ps aux";
CMD="ps -e -o pid,pcpu,pmem,size,rsz,vsize,thcount,cmd";
#PLOT="%CPU %MEM VSZ";
PLOT="%CPU %MEM SZ RSZ VSZ THCNT";
[ -f ~/${BASEPRG}.rc ] && source ~/${BASEPRG}.rc;
# Parametros longos
set -- ${@//--help/-h};
set -- ${@//--time/-t};
set -- ${@//--interval/-i};
set -- ${@//--version/-v};
while getopts hvt:h: opc ; do
case ${opc} in
t) TIME="${OPTARG}";;
i) INTERVAL="${OPTARG}";;
h) usage && exit 0;;
v) showVersion; exit 0;;
*) usage && exit 1;;
esac
done
_HEADER=( $( ${CMD} | head -1 ) );
shift $(($OPTIND - 1))
PID=${1};
[ -z "${PID}" ] && usage && exit 1;
function find() {
local key="${1}";
local i=0;
local tot=${#_HEADER[@]};
for ((i=0;i<tot;i++)) {
[ "${key}" == "${_HEADER[$i]}" ] && {
echo $i;
return
}
}
echo 255;
}
function mkchart() {
local pid="${1}";
local ppid="${2}";
local data=$$.${pid}.csv;
local chart=$$.${pid}.png;
local plot=$$.${pid}.plot;
local date=$( date +'%d/%m/%Y %H:%M:%S' )
local key=;
### debug
echo "${_HEADER[@]}";
for ((i=0;i<TIME;i+=INTERVAL)) {
RES=( $( ${CMD} | grep -w ${pid} | egrep -wv "grep|${PRG}|tee" ) );
### debug
echo "${RES[@]}";
for key in ${PLOT} ; do
local idx=$( find "${key}" );
[ "${idx}" != "255" ] && {
#echo "$i ${key} ${RES[$idx]}";
echo "$i ${RES[$idx]}" >>/tmp/.${key}.${data};
}
done
sleep ${INTERVAL};
}
for key in ${PLOT} ; do
[ -f /tmp/.${key}.${data} ] && {
cat >>/tmp/.${key}.${plot} <<EOF
set terminal png size 400,300
set output '/tmp/.${key}.${chart}'
set grid y
set title '${key} ${date} $( date +'%d/%m/%Y %H:%M:%S' )'
set ylabel '${key}'
set xlabel 'Interval'
plot '/tmp/.${key}.${data}' t'' with lines
EOF
gnuplot /tmp/.${key}.${plot} 2>/dev/null;
}
done
convert -append /tmp/.*.${ppid}.*png ${BASEPRG}.${pid}.$( date +%Y%m%d-%H%M%S ).png;
rm -f /tmp/.*.${ppid}.*;
}
mkchart ${PID} $$ | tee -a ${BASEPRG}.${PID}.$( date +%Y%m%d-%H%M%S ).log
Liberar cliente SSH no firewall
Script para gravar DVD, gera imagem e grava na mídia
Criar pacotes .deb apartir de script
Firewall para Compartilhamento de Conexão 3G
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (41)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (5)
Preciso recuperar videos *.mp4 corrompidos (0)









