【问题标题】:WMI/ASP Memory IssuesWMI/ASP 内存问题
【发布时间】:2013-09-09 22:18:57
【问题描述】:

我创建了一个用经典 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   
%>

【问题讨论】:

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


    【解决方案1】:

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

    另外,尝试创建一个强类型类而不是 WMI 查询,您可以通过查看此站点来做到这一点:MGMTClassGen

    【讨论】:

    • 我认为可能是这样......所以最初我编写了一个 VB 应用程序来查询 WMI 并导出到 xml 文件,但仍然使用 WmiPrvSvc.exe 获得高内存使用并再次停止大约 500mb... 然后我使用了您链接到的 MGMTClassGen 工具生成的类,我得到了完全相同的结果。我现在注意到,如果我查询 WMI 服务,我没有任何问题,但是在查询打印机时,这就是我遇到问题的时候......我还在互联网上找到了有关 WMI 内存泄漏的链接,但是在尝试热修复时它说不适用于我正在使用的系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多