2011/07/22

【dev】powershell を利用して handle リークを監視する

 
Powershell の ps コマンドと schedule コマンドを利用してハンドルリークを
検出する方法の紹介。
 
プロセスは何でも良いのですが、schdule コマンド自身のリークを
チェックしてみます。ハンドル数が44未満の時は緑色、ハンドル数が
44以上の時、赤色表示させます。
 
schedule --process powershell --args "/c ps | where { $_.name -eq 'schedule' }" --uniq-last --option trim --option item-hint-space --if "$1<44" --exec "color green" --if "$1>=44" --exec "color red"
 
powershell_handle_monitor
 
if で参照している変数は、左から
 
・$1 が Handles : プロセスがオープンしたハンドル数。
・$2 が NPM(K) : プロセスが使用している非ページ メモリのサイズ
・$3 が PM(K): プロセスが使用しているページ可能なメモリのサイズ
・$4 が WS(K): プロセスのワーキング セットのサイズ
・$5 が VM(M): プロセスが使用している仮想メモリのサイズ
・$6 が CPU(s): プロセスがすべてのプロセッサで使用したプロセッサ時間
・$7 が ID: プロセスのプロセス ID (PID)
・$8 が ProcessName: プロセス名
 
となっています。変数では小数点の比較は出来ませんが、文字列の不一致比較、
整数の比較により各イベントを実行できるので、仮想メモリが一定数を超えたら
--exec "process mail.exe" などで、メール送信などを行うことも可能です。
 
--exec "run sound.mp3" とするとサウンドも鳴らせますが、個人的には
使い道あるのかは疑問かも。
 
以上、schedule コマンドの一つの使いでした。

0 件のコメント:

コメントを投稿