监视性能计数器 Memory\\% Committed Bytes in Use
系统的 % Committed Bytes In Use (Memory\% Committed Bytes In Use) 超出了阈值。 总体系统性能显著降低,并将导致操作系统和应用程序性能较差。
% Committed Bytes In Use performance 性能计数器表示 Memory\Committed Bytes 与 Memory\Commit Limit 的比率。 Committed Bytes 是已提交虚拟内存的数量,而 Commit Limit 是无需扩展页面文件就可提交的虚拟内存。
如果超过了此性能阈值,则表明页面文件无法扩展(或扩展速度已足够快)以满足应用程序内存要求。
可用物理内存数量会在以下情况时降低:
计算机上同时运行的应用程序太多。
应用程序可能在一段时间内泄漏内存。
若要确认是否出现过度分页,请将 Avg. Disk sec/Transfer(物理磁盘计数器)和 Pages/sec 计数器值相乘。 如果这些计数器的乘积超过 0.1,表示分页占用了超过 10% 的磁盘访问时间。 如果这种情况长期出现,你可能需要更多内存。
然后,检查是否因为运行应用程序而产生了过度分页。 如果可能,使用最高的工作集值停止应用程序,并查看这是否会显著改变分页速度。 如果你怀疑出现了过度分页,请检查系统监视器中的 Pages/sec 计数器。 作为内存对象类型的一部分,此计数器将显示由于不在物理内存中而必须从磁盘读取的页面数量。 (注意此计数器和 Page Faults/sec 之间的区别,后者仅表示数据在内存的特定工作集中不能立即可用。)
要解决低物理内存问题,管理员可选择以下一种或多种选项:
关闭或停止一个或多个应用程序、服务、进程
向计算机添加更多的物理内存
将应用程序移动至一个或多个附加计算机(仅适用于服务器)
如果系统的物理内存和应用程序加载供应充足,但系统持续长时间超出可用的物理内存阈值,则某个应用程序可能正在泄漏内存。 要确定正在泄漏内存的应用程序,系统管理员可执行以下操作:
打开系统监视器并在一段时间内监视下列系统范围的性能计数器:
Paging File\% Usage
Paging File\%
Memory\Pool Nonpaged Bytes
Memory\Pool Paged Bytes
如果这些计数器其中任一个长时间持续增加,则应用程序可能在泄漏内存。 要查看这些性能计数器的最新历史记录,可使用以下视图:
如果系统出现内存泄漏,则可以通过使用“系统监视器”监视以下每个正在运行的进程的计数器来确定具体的应用程序:
Process\Page File Bytes
Process\Pool Nonpaged Bytes
Process\Pool Paged Bytes
Process\Private Bytes
Process\Thread Count
如果在任意计数器中观察到了持续和大幅度的增加,可能有必要联系应用程序供应商以寻求支持。
Target | Microsoft.Windows.Server.2003.OperatingSystem | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | False | ||
Instance Name | Memory | ||
Counter Name | \% Committed Bytes In Use | ||
Frequency | 120 | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | System.Performance.ConsecutiveSamplesThreshold | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.Windows.Server.2003.OperatingSystem.PercentCommittedBytesInUse" Accessibility="Public" Enabled="false" Target="Microsoft.Windows.Server.2003.OperatingSystem" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="SystemPerf!System.Performance.ConsecutiveSamplesThreshold" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.Windows.Server.2003.OperatingSystem.PercentCommittedBytesInUse.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters/>
</AlertSettings>
<OperationalStates>
<OperationalState ID="UnderThreshold" MonitorTypeStateID="ConditionFalse" HealthState="Success"/>
<OperationalState ID="OverThreshold" MonitorTypeStateID="ConditionTrue" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<CounterName>% Committed Bytes In Use</CounterName>
<ObjectName>Memory</ObjectName>
<InstanceName/>
<Frequency>120</Frequency>
<Threshold>80</Threshold>
<Direction>greater</Direction>
<NumSamples>3</NumSamples>
</Configuration>
</UnitMonitor>