기반으로이것csv
질문, 특정 프로세스의 성능을 1초 간격으로 (쉼표로 구분된 값) 로그 파일에 기록하고 싶습니다 .
그것은 다음과 같습니다:
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
...
답변1
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 $*
답변2
rx와 tx는 어떻게 계산해야 합니까? 다음을 시도했습니다. 확인하고 달성하려는 내용을 알려주십시오.
#!/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;};
old_rx=0
old_tx=0
echo "timestamp,cpu_activty,mem_usage,rx_bytes,tx_bytes"
while :
do
# timestamp(unix),cpu_activity(%),mem_usage(B),network_activity(B)
timestamp=$(date +%s)
raw_rx_bytes=$(< /sys/class/net/eth0/statistics/rx_bytes )
raw_tx_bytes=$(< /sys/class/net/eth0/statistics/tx_bytes )
rx_bytes=$(( $raw_rx_bytes - $old_rx ))
tx_bytes=$(( $raw_tx_bytes - $old_tx ))
read cpu_activty mem_usage < <( ps --no-headers -o %cpu,rssize -C "${Process}" )
echo "${timestamp}","${cpu_activty}","${mem_usage}","${rx_bytes}","${tx_bytes}"
old_rx=${raw_rx_bytes}
old_tx=${raw_tx_bytes}
sleep $InterVal
done
}
Main() {
case $1 in
""|-h|--help)
show_help
;;
*)
Show_Process_Stats
;;
esac
}
Main $*