やりたいこと
特定のアプリケーションのメモリ使用量を監視して、結果をcsvとする方法を紹介します。下記のURLで紹介されている方法を参考にしました。
http://jutememo.blogspot.jp/2011/12/windows-tasklist-ruby.html
最終的にこうなる
作成されるCSVがこのようになります。Step1 使用するDOSコマンド
tasklist を使用してます。コマンドプロンプトを開き、tasklistと打ち込むと、各プロセスのメモリ使用量の一覧を表示してくれるコマンドです。
Step2 tasklistでフィルタをかける
特定のアプリのメモリ使用量を監視したいので、/fiオプションを使います。これで条件にあったプロセスだけ表示できます。
タスクマネージャでフィルタをかけるとこうなります
tasklist /fi "imagename eq taskmgr.exe"
※検索条件はいろいろ対応してます。STATUS, PID, USDERNAMEなどでもフィルタできます。
詳細はtasklist /?を実行してヘルプからご確認ください。
Step3 CSV形式で表示する
/FO オプションで出力する形式を指定できます。また、/NHオプションで列見出しを非表示にできます。(ループさせたときにじゃまなので非表示にしてます。)
tasklist /fi "imagename eq taskmgr.exe" /FO "CSV" /NH
Step4 バッチファイルにしてループさせる
1秒間隔で10回ループさせたバッチがこのようになります。@echo off for /L %%i in (1,1,10) do ( SET /P DUMMY="%date% , %time%," < nul tasklist /fi "imagename eq taskmgr.exe" /FO "CSV" /NH ping localhost -n 2 > nul )今まででてきていないことを2個使ってます。
(1)3行目で改行しないで、日付をつけてます。
echoの代用みたいな方法で、こうやるとできます。
(2)5行目で1秒間のSleepを入れてます。こちらもこうやると自分の環境では、1秒ぐらい待ちます。
このsleepは結構精度が悪いです。
timeoutだと、文字が残るので、ひとまずこれでやってます。
Step5 時間が更新されない?
やった。できた。と思ったら時刻が更新されていませんでした。http://yohheii.blogspot.jp/2008/11/blog-post_12.html
↑を参考に、このように修正しました。
@echo off setlocal enabledelayedexpansion for /L %%i in (1,1,10) do ( SET /P DUMMY="!date! , !time!," < nul tasklist /fi "imagename eq taskmgr.exe" /FO "CSV" /NH ping localhost -n 2 > nul )2行目を追加して、dateとtimeを!で囲んでいます。
Step6 できたバッチをリダイレクトしてファイル化する
コマンドプロンプト上で、下記のようにバッチを実行すると、csvファイルを作成してくれます。MemtaskMgr.bat > test.csv
(↑作ったバッチの名前)
そうすると、csvがでます。
0 件のコメント:
コメントを投稿