PS com gráficos por processo
Publicado por Pedro Robson Leão (última atualização em 21/10/2009)
[ Hits: 6.220 ]
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
Configurando um Servidor de Nomes no CL10 apenas respondendo algumas perguntas...
Backup e PHP conbinação explosiva.
Mudar senha de usuário automaticamente
Comparar recursivamente duas pastas
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Aplicativo simples para gravar tela
Quebra de linha na data e hora no Linux Mint
Firefox não abre em usuário não administradores (2)
Ubuntu com problemas no áudio (1)
Sempre que vou baixar algum pacote acontece o erro dpkg (8)
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (8)