April 21, 2005
安くて、割と簡単にWindowsサーバのメモリ監視ができるツールってありませんかね??
mrtgなどは、異常発覚時にメールでPush配信できるのかな。でも、mrtgをWindowsに組み込むのは結構手間がかかるような話をどこかで見たので、ちょっと嫌だな。(運用中のサーバに早急に組み込まなくてはいけないので)
サービスじゃなくても良いです。エージェントがメモリを監視して、定期的または異常時にメールサーバにレポートを送信してくれれば。VBあたりで作ることも想定しておりますが、WSHでリソースチェック&メール送信スクリプトを組んで、タスクスケジューラから起動するようなプログラムの方が信頼性高いですかね?
-------追記
とりあえずコミットチャージ(タスクマネージャのPF使用量)と思わしき値をえるWSHスクリプトを書いてみました。本当にコミットチャージの値とイコールなのかは謎です(w
(コミットチャージとは、物理メモリ、仮想メモリに関わらず使用されているメモリ量。この値が物理メモリ量を超えるとマシンのパフォーマンスが落ちるという判断で良いらしい。)
getCommitCharge.wsf
---------------------
<job>
<script language="vbscript">
Set OSInfos = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_OperatingSystem")
For Each OSInfo In OSInfos
Wscript.Echo "コミットチャージ: " & int((OSInfo.SizeStoredInPagingFiles - OSInfo.FreeSpaceInPagingFiles) / 1024) & "MB"
Next
</script>
</job>
---------------------
これにメール送信機能をつけてやれば、とりあえずメモリ監視が可能。
ただし、異常時にタスクスケジューラ起動毎にメールが送られるのは良いのか悪いのかを考える。
1時間に1回ぐらいの監視なら良いけど、5分に1回とかに監視をするなら、連続でメールを送らないような処理を入れたいわけだが・・・。どうやってやればいいかな。
まぁメモリ監視だから1時間に1回ぐらいにしておいて、異常時にメール送信が簡単ですな。
----さらに追記
プレゼント。
タスクスケジューラに毎日1時間毎に何かを起動する設定を行うスクリプト
タスクスケジューラは一日毎に設定をしなくてはいけないので、1時間毎となるとたくさん登録しなきゃいけないので、簡単に設定するスクリプトをプレゼント。ただし、未テストです。これから1週間かけて動作チェックします(笑)
taskCreate.wsf
-----------------------------------
<job>
<script language="vbscript">
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
for i= 0 to 23
if i < 10 then
sTime = "0" & i
else
sTime = i
end if
errJobCreated = objNewJob.Create _
("##script名 memoryCheck.wsf", "********" & sTime & "0000.000000+540", _
True , 1 OR 2 OR 4 OR 8 OR 16 OR 32 OR 64, , , JobID)
if errJobCreated <> 0 then
Wscript.Echo "error occured!"
Wscript.Quit(1)
end if
next
Wscript.Echo "Setting Success!!"
</script>
</job>
-----------------------------------
■さらに分毎とかに登録しなきゃいけない事態に陥った人向けに参考文献
スクリプトを使用してタスクのスケジュールを管理することはできますか
Creating Scheduled Tasks