PS com gráficos por processo
Publicado por Pedro Robson Leão (última atualização em 21/10/2009)
[ Hits: 6.258 ]
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
Intalação do Thunderbird - Debian
Sysinfo - Informações sobre o seu computador
Medindo a velocidade de conexão
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Máquina perereca - até onde é possível o uso de Linux?
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
baschrc customizado pegeui vários. (1)
eu tive uma idéia, mas mais privada sobre o assunto de mu online e ser... (7)
Debian 13 "trixie&... lançado! (42)
como posso instalar o anbox e como inicio ele para funcionar arquivos ... (10)