メモリ関連の調査をしているときにどうしてもExcelで集計したいということを言われたので、とりあえずやってみた。
普段のjstatのログは以下のように出る。
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 512.0 0.0 0.0 124928.0 6358.9 83968.0 42417.6 65064.0 58754.0 9256.0 7392.2 15501 94.212 15488 1702.193 1796.405
とりあえず日付とカンマ区切りができればそのままExcelで読んでよしなにできそうなので、sedとawkを使ってやってみた。
動作しているアプリケーションがWindows環境なので、あらかじめsedとawkを実行できるようにインストールしておく。
Macで試していたらawkのstrftimeがないと怒られるのでgawkをインストールした。
awk: calling undefined function strftime
で、いろいろ試して以下のようになった。
jstat -gc <process id> 10s | gawk '{print strftime("%Y/%m/%d-%H:%M:%S"), $0; fflush();}' | sed -e 's/^ *//g; s/ */,/g' >> jstat.csv
これで以下の用に出力されるようになる。
2018/04/28-23:28:46,S0C,S1C,S0U,S1U,EC,EU,OC,OU,MC,MU,CCSC,CCSU,YGC,YGCT,FGC,FGCT,GCT,
2018/04/28-23:28:46,512.0,512.0,0.0,0.0,124928.0,4831.7,83968.0,42283.1,65064.0,58754.0,9256.0,7392.2,15507,94.412,15494,1703.366,1797.778
2018/04/28-23:28:47,512.0,512.0,0.0,0.0,124928.0,4831.7,83968.0,42283.1,65064.0,58754.0,9256.0,7392.2,15507,94.412,15494,1703.366,1797.778
ヘッダにも日付が入ってしまうけどそこは妥協点ということにしておく。