PS com gráficos por processo
Publicado por Pedro Robson Leão (última atualização em 21/10/2009)
[ Hits: 6.194 ]
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
mPlayRecTv - assista e grave a programação da TV com MPlayer
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Descritores de Arquivos e Swappiness
Solução rápida para o problema do Network Manager conectar mas não navegar
Como instalar no Linux Jogos da Steam só para Windows
Instalando o Team Viewer no Debian Trixie - problema no Policykit
Qual driver da NVIDIA instalar? (3)
Como instalar o KDE3 em Distros Atuais ou Quase (5)
Mouse bluetooth OEX Motion MS 406 (0)
preciso de ajuda aqui... [RESOLVIDO] (12)
Não acesso a conta do Banco do Brasil pelo Google Chrome [RESOLVIDO] (5)