PS com gráficos por processo
Publicado por Pedro Robson Leão (última atualização em 21/10/2009)
[ Hits: 6.230 ]
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
PKG Sync v3.0 - Utilitário para backup de pacotes deb baixados - Versão final
Backup com data no nome do arquivo
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
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
O que você está ouvindo agora? [2] (186)
O 1º artigo a gente nunca esquece (0)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (8)