![非分页内存使用量随着 EVEN 进程(事件记录器/查看器)的增加而增加,直至耗尽](https://linux22.com/image/619450/%E9%9D%9E%E5%88%86%E9%A1%B5%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E9%87%8F%E9%9A%8F%E7%9D%80%20EVEN%20%E8%BF%9B%E7%A8%8B%EF%BC%88%E4%BA%8B%E4%BB%B6%E8%AE%B0%E5%BD%95%E5%99%A8%2F%E6%9F%A5%E7%9C%8B%E5%99%A8%EF%BC%89%E7%9A%84%E5%A2%9E%E5%8A%A0%E8%80%8C%E5%A2%9E%E5%8A%A0%EF%BC%8C%E7%9B%B4%E8%87%B3%E8%80%97%E5%B0%BD.png)
我的服务器存在非分页内存问题。使用量缓慢上升,直到耗尽,服务器停止提供网页服务,因为 IIS 无法获得足够的非分页内存。
这是一个 32 位 Windows 2003 服务器。
任务管理器没有显示任何可疑活动,并且所有正在运行的进程都消耗“正常”数量的 NP 内存,并且它们在一段时间内都保持稳定。
根据标签列表,显示所有使用情况的标签为“偶数”,这是事件查看器的标签。除了 NP 内存耗尽且 IIS 开始抱怨时,事件日志中没有显示任何其他警告或错误。
服务器运行 MSSQL、IIS 和 hMailserver,没有其他任何内容。
有人有任何想法或以前见过这种情况吗?如果它是一个与网卡等驱动程序关联的标签,我会去某个地方,但是事件查看器,我该去哪里呢!
Poolmon 输出为 EVEN
Tag Type Allocs Frees Diff Bytes Per Alloc
Even NonP 65563201 ( 948) 64585254 ( 861) 980124 47049280 ( -2384) 48
谢谢
答案1
我首先要检查的是确保max server memory (MB)
在 SQL Server 中设置了该选项。这是一个服务器选项,它告诉 SQL Server“这是您可以拥有的所有内存”。默认情况下,SQL Server 将使用所有可用内存来存储数据缓存等内容,这对于像您这样的共享环境来说可能是个坏消息。
在您的 SQL 实例中,打开一个新的查询窗口并输入:
sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
sp_configure 'max server memory (MB)'
如果值为config_value
0,则表示允许 SQL Server 使用其所需的所有内存。在这种情况下,您应该将其设置为更适合您环境的值。
您没有提到您的服务器有多少内存,但由于您处于 32 位环境中(并且您也没有指定 Windows 的哪个版本),我将继续假设 4GB。您可能希望将 SQL 限制为 1GB 以允许其他应用程序服务。您可以这样做:
sp_configure 'max server memory (MB)',1000
GO
RECONFIGURE
GO
如果您使用的是 Windows 2003 Enterprise 且内存 > 4GB,那么您当然可以将最大内存设置为大于该值。
您可能还想研究使用地址窗口扩展 (AWE),它可以为您提供更多的喘息空间。您可以在 TechNet 上阅读有关它的信息这里。
答案2
问题发生时,打开任务管理器并添加Handles
列。对该列进行排序,并查找任何看起来过大的值。这可能有助于获取服务器在启动时和一段时间内的基线。启动后多久才能看到问题?句柄数量最多/异常的进程很可能是罪魁祸首,尽管确定确切原因可能是另一回事。
就我而言,我曾见过这种情况,原因是 CommVault(备份)代理卸载失败,导致服务无法正常运行,每隔几秒就会创建两个 HKCU(注册表)句柄。每个打开的句柄都会消耗一些内存,最终导致整个组织的 Exchange 环境瘫痪。
Sysinternalshandle.exe
还可以用于查看哪些进程正在使用许多句柄以及附加到哪些对象。