2014年6月22日日曜日

Windows メモリ使用量 監視

やりたいこと
特定のアプリケーションのメモリ使用量を監視して、結果を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がでます。
補足
powershellで同じようなことをやる方法は、こちらになります。
0 件のコメント:
コメントを投稿