Skip to content

Instantly share code, notes, and snippets.

@alab1001101
Created May 29, 2012 06:13
Show Gist options
  • Save alab1001101/2822887 to your computer and use it in GitHub Desktop.
Save alab1001101/2822887 to your computer and use it in GitHub Desktop.
Process Monitoring Bash Script
#!/bin/bash
CMDS="php-fpm nginx memcached php java beam.smp|epmd"
OUTFILE=$(tty)
cmd_values=()
cmd_prev_value=""
function get_stats()
{
awk 'BEGIN {
split("'$cmd_prev_value'", prev, /,/)
sum_exec=0; iowait_sum=0; rss=0
}
/^se.sum_exec_runtime/ {sum_exec+=$3}
/^se.iowait_sum/ {iowait_sum+=$3}
/^VmRSS/ {rss+=$2}
END {
CONVFMT="%.10g"
printf(" %s %s %s kB", sum_exec-prev[1], iowait_sum-prev[2], rss) >> "'$OUTFILE'"
printf("%s,%s", sum_exec, iowait_sum)
}' \
$(eval echo /proc/{$1}/{task/*/sched,status} | tr -d '{}')
}
function get_cpu_stat()
{
# USER_HZ
# user user nice system idle iowait irq softirq steal guest
#cpu 403898 50 532159 12154737 16497 2274 77612 0 0
awk '/cpu / {
CONVFMT="%.10g"
printf(" %s %s %s %s %s %s %s %s %s", $2, $3, $4, $5, $6, $7, $8, $9, $10) >> "'$OUTFILE'"
}' /proc/stat
}
cmd_num=0
function stat_line()
{
echo -n $(date +'%Y-%m-%d %H:%M:%S.%N') >> $OUTFILE
get_cpu_stat
cmd_num=0
for cmd in $CMDS; do
echo -n " $cmd"
cmd_prev_value=${cmd_values[cmd_num]}
cmd_values[$cmd_num]=$(get_stats $(pgrep -xd , $cmd))
((cmd_num++))
done
echo >> $OUTFILE
}
for cmd in $CMDS; do
cmd_values[$cmd_num]=0,0
((cmd_num++))
done
while [[ 1 ]]; do
stat_line
sleep .9
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment