従来の ASP (IIS 7.5 でホスト) で記述されたサーバー監視スクリプトを作成しました。
jQuery を使用してコンテンツを自動的にリロードする (WMI 情報を更新する) メイン ページがあります。
4 つのページがあります (2 つのサーバーのサービス ステータス、メイン DC のプリンター ステータス、同じサーバーのディスク使用量)。サービス ステータス ページは 10 秒ごと、プリンターは 5 秒ごと、ディスク使用量は 1 分ごとに更新されます。
スクリプトは基本的に数時間動作し、コード 500 の内部サーバー エラーが発生します。IIS ログをチェックすると、「メモリ不足」のため、サーバーと WmiPrvSvc.exe (NETWORK SERVICE アカウント) のプロセスを確認します。数百 (500mb) であり、ISS ワーカー プロセス (w3wp.exe) は約 50mb を使用しています (それより高い他の w3ps.exe プロセスがあります)。
両方を終了すると、アクションが再開されます... または、ページ/リクエストをしばらく (30 秒から 5 分の間で変化します) 停止すると、WmiPrvScs が終了し、問題は発生しません。
メモリ使用量を最小限に抑える方法はありますか、またはメモリを適切に切断/クリアするコマンドはありますか?
以下は、何が起こっているかを理解するための私のページの 1 つの基本です...
ありがとう、ポール。
<%
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery("SELECT Caption, Started FROM Win32_Service WHERE StartMode = 'Auto'")
Set arrServices = Server.CreateObject("System.Collections.ArrayList")
intServices = colListOfServices.Count
For Each objService in colListOfServices
arrServices.Add objService.Caption & "@" & objService.Started
Next
arrServices.Sort()
Response.Write "<table width=""100%"" class=""tblServices"">" & vbCr
For Each strService in arrServices
If InStr(strService, ".NET Framework") = 0 AND InStr(strService, "Sophos Web Intelligence Update") = 0 AND InStr(strService, "Shell Hardware Detection") = 0 Then
' Above services, start at system startup and then stop after nothing to do
arrServiceDetails = Split(strService, "@")
strServiceName = arrServiceDetails(0)
strServiceStatus = arrServiceDetails(1)
End If
Next
Response.Write "</table>"
Set objWMIService = Nothing
Set colListOfServices = Nothing
Set arrServices = Nothing
%>