在对ASP.NET应用程序进行负载测试时,我们发现这些页面在高负载下需要20-30秒.
是否有一个特定的perfmon计数器可以识别Web服务器上的这种瓶颈? cpu,内存和磁盘都正常.
或者我们必须使用perfmon以外的工具来追踪这个瓶颈吗?
解决方法
如果您怀疑特定应用程序或服务导致内存泄漏,请使用以下计数器调查应用程序的内存使用情况:
Memory\Available Bytes reports available bytes; its value tends to fall during a memory leak. Memory\Committed Bytes reports the private bytes committed to processes; its value tends to rise during a memory leak. Process\Private Bytes reports bytes allocated exclusively for a specific process; its value tends to rise for a leaking process. Process\Working Set reports the shared and private bytes allocated to a process; its value tends to rise for a leaking process. Process\Page Faults/sec reports the total number of faults (hard and soft faults) caused by a process; its value tends to rise for a leaking process. Process\Page File Bytes reports the size of the paging file; its value tends to rise during a memory leak. Process\Handle Count reports the number of handles that an application opened for objects it creates. Handles are used by programs to identify resources they must access. The value of this counter tends to rise during a memory leak; however,you cannot rule out a leak simply because this counter's value is stable.
内存泄漏和非分页池
虽然任何泄漏都很严重,但当涉及非分页池时,内存泄漏尤其令人担忧.许多系统服务从非分页池分配内存,因为它们在处理中断时需要引用它,并且当时不能发生页面错误.要确定泄漏是否影响非分页池,请在监视中包括以下计数器:
Memory\Pool Nonpaged Bytes Memory\Pool Nonpaged Allocs Process\Pool Nonpaged Bytes
如何识别:
泄漏的应用程序不断要求更多的内存.它的特点是以与系统承诺字节相同的速率增加进程/页面文件字节数;即所有记忆承诺都归因于一个过程.可用字节逐渐减少,直到系统向外输出某些内容,然后虚拟字节数增加,以便为更多可用字节腾出空间.泄漏应用程序的工作集实际上会在其部分被分页时减少.请注意Page Faults / sec如何随着可用字节数的减少而增加.
Windows资源工具包包含一个名为LeakyApp.exe的示例程序.该程序具有不断分配越来越多内存的典型故障.