我创建了一个用经典 ASP 编写的服务器监控脚本(托管在 IIS 7.5 上)。
它有一个使用 jQuery 自动重新加载内容的主页(更新 WMI 信息) 它工作得很好,但似乎对内存有胃口!
有 4 个页面(2 个服务器的服务状态、主 DC 上的打印机状态和同一服务器上的磁盘使用情况)服务状态页面每 10 秒更新一次,打印机每 5 秒更新一次,磁盘使用情况每分钟更新一次。
该脚本基本上可以工作几个小时,然后我收到代码 500 内部服务器错误,一旦检查 IIS 日志,因为它“内存不足”并查看服务器上的进程和 WmiPrvSvc.exe(网络服务帐户)是数百 (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
%>