Loading [MathJax]/extensions/tex2jax.js

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回ループさせたバッチがこのようになります。
  1. @echo off  
  2. for /L %%i in (1,1,10do (  
  3.  SET /P DUMMY="%date% , %time%," < nul  
  4.  tasklist /fi "imagename eq taskmgr.exe" /FO "CSV" /NH  
  5.  ping localhost -n 2 > nul  
  6. )  
今まででてきていないことを2個使ってます。
(1)3行目で改行しないで、日付をつけてます。
echoの代用みたいな方法で、こうやるとできます。
(2)5行目で1秒間のSleepを入れてます。こちらもこうやると自分の環境では、1秒ぐらい待ちます。
このsleepは結構精度が悪いです。
timeoutだと、文字が残るので、ひとまずこれでやってます。
Step5 時間が更新されない?
やった。できた。と思ったら時刻が更新されていませんでした。
http://yohheii.blogspot.jp/2008/11/blog-post_12.html
↑を参考に、このように修正しました。
  1. @echo off  
  2. setlocal enabledelayedexpansion  
  3. for /L %%i in (1,1,10do (  
  4.  SET /P DUMMY="!date! , !time!," < nul  
  5.  tasklist /fi "imagename eq taskmgr.exe" /FO "CSV" /NH  
  6.  ping localhost -n 2  > nul  
  7. )  
2行目を追加して、dateとtimeを!で囲んでいます。
Step6 できたバッチをリダイレクトしてファイル化する
コマンドプロンプト上で、下記のようにバッチを実行すると、csvファイルを作成してくれます。
MemtaskMgr.bat > test.csv
(↑作ったバッチの名前)
そうすると、csvがでます。
補足
powershellで同じようなことをやる方法は、こちらになります。
0 件のコメント:
コメントを投稿