CPU/メモリ使用率取得を作ってみた
ライブラリ「CPU/メモリ使用率取得」を作ってみました。
%なしの数値で取得します。
拾い物のツギハギです。
使いかただけがオリジナルです。
スクリプト
'共通
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer(localhost)'CPU
Set colItems = objService.ExecQuery("SELECT * FROM Win32_Processor")For Each objItem In colItems
SetUMSVariable $CPU使用率$ , objItem.LoadPercentage
cpuUseRate = objItem.LoadPercentage
Next'メモリ
Set objEnumerator = objService.ExecQuery("Select * FROM Win32_OperatingSystem")For Each objInstance In objEnumerator
freeMemory = objInstance.FreePhysicalMemory
'SetUMSVariable $メモリ空き容量$ , Round(freeMemory / 1024 / 1024, 2) & "GB"
totalMemory = objInstance.TotalVisibleMemorySize
'SetUMSVariable $メモリ総容量$ , Round(totalMemory / 1024 / 1024, 2) & "GB"
NextmemoryUseRate = freeMemory / totalMemory
memoryUseRate = FormatPercent(memoryUseRate, 0)
memoryUseRate = Replace(memoryUseRate, "%", "")
memoryUseRate = 100 - memoryUseRate
SetUMSVariable $メモリ使用率$ , memoryUseRate
使いかたの案
A. シナリオ内でライブラリとして
CPU/メモリ使用率取得
分岐:CPU使用率かメモリ使用率がたとえば80%以下
True
何も置かない
False
サブルーチン呼び出し:リカバリ処理or
音
音声読み上げ:救助要請
タスクマネージャーのパフォーマンスタブを表示
待機ボックス:リカバリ誘導
B. シナリオ外で監視ルール発動のセンサー代わりに
- ウィンドウタイトル「CPU使用率高騰」と「メモリ使用率高騰」のウィンドウ識別ルールを作っておく
- 「CPU使用率高騰」か「メモリ使用率高騰」の出現でサブルーチンを発動する監視ルールを作っておく
- 監視ルールで発動させるサブルーチンの末尾に、「CPUメモリ使用率取得.vbs」を実行する「Explorerでファイル開く」を置く(スクリプトはこの投稿の最下部)
- シナリオ先頭に、「CPUメモリ使用率取得.vbs」を実行する「Explorerでファイル開く」を置く
- 「CPUメモリ使用率取得.vbs」自体のパフォーマンス(参考値)
CPU使用率:0.5〜1.0%程度
メモリ消費:2.5MB程度
これを高負荷と読むかごく僅かと読むか - 停止方法やその他は、このへんのスレッドに準ずる
https://winactor.com/questions/?q=初期値ありのテキストボックスをn秒後に自動的に閉じる
経緯
CPU使用率が異常に高く、100%に振り切れることもある。
これでは自動化の意味がない。
周囲でこんな声を聴きました。
この手の症状も、きっと実行開始時は正常だったはず。
実行中に何らかの条件が重なって暴走したと考えられる。
ここも条件を変えて連鎖を断ち切れば、きっと解消するんだと思います。
ウチの場合はセキュリティソフトが原因のほとんどを占めていることを特定済みなので、わたしが辿った経緯の資料と対策を改めて共有しました。
原因を特定するまで、ずっと見守るのは骨が折れます。
兆候をうまいことキャッチして、人と同じリカバリ処理を組み込めればベター。
ここで少しよぎりました。
https://winactor.com/questions/question/pcによって実行スピードを変える必要がある場合の/
「CPU/メモリ使用率取得」が激重症状未然防止の根本対策を見出すまでの繋ぎになればと。
CPUやメモリの負荷が原因の1つっぽいスレッド
https://winactor.com/questions/question/「word操作閉じる」でwordがフリーズし先へ進めない/
https://winactor.com/questions/?q=WinActorが実行中にプログラム終了してしまう。
リファレンス
[VBScript/WMI] CPU使用率をリモート監視: へっぽこSEのメモメモ
http://heppoen.seesaa.net/article/132740982.html
WSH/VBScriptでCPU情報を取得する方法 - Windowsと暮らす
https://win.just4fun.biz/?WSH/VBScriptでCPU情報を取得する方法
VBScript で空きメモリ容量を取得する
https://www.upken.jp/kb/HdPBaCEihTHpWKzfDZZsVhEJEYkamv.html
CPUメモリ使用率取得.vbs
※ 太字部分のボーダーを適宜調整
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objService = objLocator.ConnectServer(localhost)Set colItems = objService.ExecQuery("SELECT * FROM Win32_Processor")
Set objEnumerator = objService.ExecQuery("Select * FROM Win32_OperatingSystem")
Do
For Each objItem In colItems
cpuUseRate = objItem.LoadPercentage
NextFor Each objInstance In objEnumerator
freeMemory = objInstance.FreePhysicalMemory
totalMemory = objInstance.TotalVisibleMemorySize
NextmemoryUseRate = freeMemory / totalMemory
memoryUseRate = FormatPercent(memoryUseRate, 0)
memoryUseRate = Replace(memoryUseRate, "%", "")
memoryUseRate = 100 - memoryUseRateIf cpuUseRate > 80 Then
MsgBox " CPU使用率が " _
& cpuUseRate _
& " %です。" _
& vbCrLf _
& " 原因を究明して対策を講じてください。" _
& vbCrLf _
& " タスクマネージャーの状況を参考にします。" , _
48, _
"CPU使用率高騰"
Exit DoElseIf memoryUseRate > 80 Then
MsgBox " メモリ使用率が " _
& memoryUseRate _
& " %です。" _
& vbCrLf _
& " 原因を究明して対策を講じてください。" _
& vbCrLf _
& " タスクマネージャーの状況を参考にします。" , _
48, _
"メモリ使用率高騰"
Exit DoElse
WScript.Sleep 100End If
Loop