プロセスごとのCPU負荷計測用に作成したスクリプトです。
一定周期の出力結果を1つのCSVファイルに追記していくパターンと
ダンプした時間帯ごとにCSVファイルを分割するパターンの2パターンで作成してみました。
用途に応じて使い分けも可能です。
パターン①:一定周期の出力結果を1つのCSVに追記していく
作成したシェルスクリプトはこちら。
record_ps_aux.sh
while true;
do
date
date "+%Y/%m/%d %H:%M:%S" >> ps_record.csv;
ps aux | awk '{ printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);}' >> ps_record.csv;
sleep 10; #10sec周期で実行
done;
10秒周期でps -auxコマンドの出力結果を1つのCSVファイルにどんどん記録していくものです。コンソール上にはdateコマンドにより記録した時間のタイムスタンプが出力されます。
後でExcelでの編集が容易になるよう、awkを使ってタブ区切りで出力するようにしています。
見ての通り、無限ループで実行しているため、計測終了後にCtrl+Zで強制終了する必要がありますのでご注意ください。
パターン②:ダンプした時間帯ごとにCSVファイルを分割する
record_ps_aux2.sh
while true;
do
date
ps aux | awk '{ printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11);}' > ps_record_`date +%Y%m%d_%H%M%S`.csv;
sleep 3600;
done;
こちらはps -auxコマンド実行した時間ごとに出力するCSVファイルを分ける形式です。
dateコマンドの出力結果を出力先ファイル名の末尾に記載することで、タイムスタンプごとのCSV出力が可能となります。
こちらも無限ループで回してるため、計測終了後に強制終了するのを忘れずにお願いします。
おわりに
もう少しうまい書き方などありましたら、ぜひご教示いただけると嬉しいです。