linuxでCPUの状態がなんか不安定だなぁ・・・ということで、しばらく監視をすることに。
と言ってももちろん (*・д・) ジー っと監視するんじゃなくて、しばらく自動で監視して、後で結果を見てどんな状況なのかを見よう、ってことで実施するやつです。
vmstatでやってみる
topコマンドで常時モニタリングはできるけど、今回は長時間のログを残しておきたいってことで、vmstatコマンドを使用。
vmstat 10 とかすれば 10秒ごとにCPUやメモリ、swapなどの情報を見ることができる。
この情報を貯めて、ログに吐き出して、後で状況を確認しよう!という思惑。
真剣に細かく調査するというよりは、簡易的にCPUの状況が知りたかっただけなのでこれで十分。
とりあえず1分ごとに監視して、ログに吐けばいいかな、と
vmstat 60 >> vmstat.log
バックグラウンドで動かす
とりあえずこれでできるはず。終わりっ!
それやとログアウトしたら終了するやん
あ、そっか・・・。じゃあバックグラウンドで動かしっぱなしにするのはnohupを&すればいいか。
nohup vmstat 60 >> vmstat.log &
こんな感じか。はいはい。完了完了。あとはゆっくりコーヒーでも・・・
いやいや、それやと時間がわからんで
時間も入れてみるがワナにハマる
確かに・・・。これだと何時に発生したのか全くわからないので、時間も入れないと・・・。
nohup vmstat 60 | gawk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 }' >> vmstat.log &
んな感じか。余裕余裕。
これやとログ出力されへんで
ぐぬぬ・・・。そうだった。awk(gawk)はバッファリングされるんだった。
なのでログには出力されないんだった。
awk(gawk) をバッファリングさせないようにするには明示的にfflush()またはsystem(“”)を呼べばいい。
nohup vmstat 60 | gawk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 } { fflush() }' >> vmstat.log &
とか
nohup vmstat 60 | gawk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 } { system("") }' >> vmstat.log &
かな。
これでとりあえず一晩ほっといて様子をみよっと。
ちなみに終了するときは”ps ax|grep vmstat” とかで見つかったプロセス番号に対して”kill プロセス番号”するんやで。