我的服务器存在非分页内存问题。使用量缓慢上升,直到耗尽,服务器停止提供网页服务,因为 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
还可以用于查看哪些进程正在使用许多句柄以及附加到哪些对象。