0

従来の 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   
%>
4

1 に答える 1

0

上記のコードを 10 秒ごとに呼び出していますか? よくわかりませんが、毎回新しい WMI オブジェクト/接続を作成しているように見えます。代わりに、オブジェクトを再作成するのではなく、そのままにしておくようにしてください。接続を保持する SingleTon クラスのようなもの。

また、WMI クエリの代わりに厳密に型指定されたクラスを作成してみてください。これは、次のサイトを参照して行うことができます: MGMTClassGen

于 2013-09-14T15:00:48.387 に答える