Networking

定期監控單個程序以記錄日誌文件

  • December 15, 2012

基於這個問題,我想以一秒的頻率將特定程序的性能記錄到csv(逗號分隔值)日誌文件中。

就像是:

timestamp(unix),cpu_activity(%),mem_usage(B),network_activity(B)
1355407327,24.6,7451518,345
1355407328,27.6,7451535,12
1355407329,31.6,7451789,467
...

我試圖獲得 rx_bytes 和 tx_bytes 但沒有運氣,其他的東西正在工作..所以你可以使用下面的腳本來做同樣的事情

#!/bin/bash

# /sys/class/net/eth0/statistics/rx_bytes
# /sys/class/net/eth0/statistics/tx_bytes

Process="$1"

[[ -z $2 ]] && InterVal=1 || InterVal=$2

show_help() {
cat <<_EOF
Usage :
       $0  <ProcessName>  <Interval (Default 1s)>
_EOF
}

Show_Process_Stats() {
pgrep "${Process}" >/dev/null 2>&1 || { echo "Error: Process($1) it not Running.."; exit 1;};
while :
do
   # timestamp(unix),cpu_activity(%),mem_usage(B),network_activity(B)
   timestamp=$(date +%s)
   read cpu_activty mem_usage < <( ps --no-headers -o %cpu,rssize  -C "${Process}" )   
   echo "${timestamp}","${cpu_activty}","${mem_usage}"
   sleep $InterVal
done
}


Main() {
case $1 in
       ""|-h|--help)
                     show_help
                     ;;
                    *)
                     Show_Process_Stats
                     ;;
esac                      
}


Main $*

引用自:https://unix.stackexchange.com/questions/58413