WMI / ASP内存问题

时间:2013-09-09 22:18:57

标签: asp-classic process wmi out-of-memory monitor

我创建了一个用经典ASP编写的服务器监控脚本(在IIS 7.5上托管)。

它有一个主页面,它使用jQuery自动重新加载内容(更新WMI信息)它工作得很好,但似乎对内存有胃口!

共有4页(2台服务器的服务状态,主DC上的打印机状态和同一服务器上的磁盘使用情况)服务状态页每10秒更新一次,打印机每5秒更新一次,每分钟更新一次磁盘。

该脚本基本上可以工作几个小时,然后我得到代码500内部服务器错误,一旦检查IIS记录它因为它是“内存不足”并查看服务器上的进程和WmiPrvSvc.exe(网络SERVICE帐户)是数百(500mb),ISS工作进程(w3wp.exe)使用大约50mb(还有其他w3ps.exe进程更高)

一旦我结束它们,它就会重新开始行动......或者如果我停止页面/请求一段时间(在30秒到5分钟之间变化),WmiPrvScs结束,我不会遇到问题。

有没有办法最小化内存使用量,还是有正确断开/清除内存的命令?

以下是我的某个页面的基础知识,可让您了解正在发生的事情......

谢谢,保罗。

<%
    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   
%>

1 个答案:

答案 0 :(得分:0)

你是否每隔10秒调用上面的代码? 我不确定,但我看起来你每次都在创建一个新的WMI对象/连接,这就加起来了。 而是尝试保持对象而不是重新创建它。类似于SingleTon类来保持连接。

另外,尝试创建强类型类而不是WMI查询,您可以通过查看此站点来执行此操作:MGMTClassGen