内存问题排错概览 – 第二部分

在我们前面的文章,我们看了看一些常见的内存问题和如何进行排错。今天我们将要过一下过多页面交换和内存瓶颈。

我们已经在多篇文章中谈过了页文件的问题 – 还有些东西记在脑子里面就是尽管你想要有足够的内存来防止过多的页面交换,这个目标不应该是尝试去完全阻止页面交换活动。一些页面错误行为是不可避免的 – 举个例子 当一个进程第一次初始化的时候。内存中修改过的虚拟页面最后不得不要更新回磁盘,因此就会有一定量的Page Writes /sec。然而,当没有安装足够的内存,你可能会看到两个特定的问题 – 太多页面错误,和磁盘争夺。

让我们从页面错误开始。页面错误被划分成两种类型,Soft fault 和 hard fault。一个页面错误在一个进程在内存中请求一个页面并且系统不能够在请求的位置找到这个页面的时候发生。如果这个请求的页面事实上在内存的其他地方,那么这是一个Soft fault。然而,如果页面不得不从磁盘上面去读取,那么一个Hard fault就发生了。大多数的系统可以毫无问题的处理软页面错误。然后,如果有大量的hard fault错误你可能会感到延迟。这个额外的磁盘I/O是由于持续的页面写入磁盘与尝试访问页文件存储在相同磁盘上面的数据的应用程序产生冲突所导致的。尽管在一个系统上面高的页面错误是一个非常直接的问题,他要求一些性能监视器中的额外数据收集和分析。当对一个怀疑的页面错误问题进行排错的时候,下面是一些重要的计数器:

Counter

Description

Values to Consider

Memory \ Pages /sec

Pages/sec 是指为解决Hard Fault从磁盘读取或写入磁盘的速度。这个计数器是可以显示导致系统范围延缓类型错误的主要指示器。它是  Memory\\Pages Input/sec 和  Memory\\Pages Output/sec 的总和。是用页数计算的,以便在不用做转换的情况下就可以同其他页计数如:  Memory\\Page Faults/sec 做比较,这个值包括为满足错误而在文件系统缓存(通常由应用程序请求)的非缓存映射内存文件中检索的页。

如果 Pages/sec乘以4,000(4k的页面大小)超过了页文件放在一个一致的基础上面的所有逻辑磁盘Bytes /  sec的70%,,那么你应该要调查了。

转换:如果页面写入磁盘大于在一个一致基础上面你的所有磁盘活动的70%,那么就有可能是一个问题

Memory  \ Page Reads /sec

Page Reads/sec 是取读磁盘以解析Hard Fault的速度。它显示读取操作的数量,它并不考虑每个操作的页面数量。当一个进程引用一个虚拟内存的页面,而此虚拟内存位于工作集以外或物理内存的其他位置,并且此页面必须从磁盘检索时,就会发生Hard Fault。此计数器是引起系统范围内延迟的主要指示器。它包含读取操作以满足文件系统缓存(通常由应用程序请求)和非缓存映射内存文件的错误。比较内存的值\\Pages  Reads/sec 与内存的值\\Pages  Input/sec 来决定每个操作取读的平均页面数量。

查看持续的值。如果这个值一直超过所有逻辑磁盘针对页文件所在的磁盘进行的操作的50%,那么就有过度页面交换发生来解决Hard Fault。

Memory  \ Available Bytes

Available Bytes 是指以字节表示的物理内存数量。此内存能立刻分配给一个进程或系统使用。它等于分配给待机(缓存的)、空闲和零分页列表内存的总和。要获得内存管理器的详细解释,请参阅 MSDN 和/或 Windows  Server 2003 Resource Kit 里的系统性能和疑难解答指南章节。

如果这个值降到在一致基础上安装内存的5%以下,那么你应该调查了。如果这个值降到在一致基础上面安装内存的1%以下,这肯定是有问题的。

记住自从操作系统不得不把修改过的页写回到磁盘,就将会有页写的操作的发生。然而,这个Page Reads /sec说明Hard Fault的数量是和内存不足的情况相当敏感的。随着有效内存值的减少,Hard Fault的数量将正常的增加。总的可以被系统支撑Pages /sec的数量是磁盘带宽的一个功能。这个意味着没有一个简单的数字来决定是否磁盘是饱和的。反而是你不得不去识别由于页面交换导致的整体磁盘流量有多少。

另外内存瓶颈的一个指示器是有效内存池耗尽了。当有效内存不足的时候,虚拟内存管理器对页面的整理被触发了。页面整理所做的是通过识别最近没有使用过的虚拟内存页来重新填装有效内存池。当页面整理是有效的,老的从进程工作集里面整理出来的页面立刻就不再需要了。整理过的页面被标记为转换并保留在内存中一段时间来减少页面写磁盘发生的次数。然而,如果有习惯性的内存不足,那么页面整理就不再那么有效果并且结果就是会有更多的页面写入磁盘。自从对于标记为转换的页面来说在内存里面只有很少的空间了,如果一个最近整理过的页面再次被引用的话它不得不从内存相反的磁盘里面来访问。瓶颈越来越严重,在同一块磁盘上面的应用程序直接I/O操作发生冲突的页文件被更新也越来越频繁。

在我们总结之前,让我们快速的讨论一下上面列出的在看Memory \ Available Bytes计数器的时候指导方针。通常如果有效内存一直超过安装内存的5%,那么你应该觉得还不错。然而,有一些应用程序可以管理自己的工作集 – IIS6、Exchange Server和 SQL Server。如果有足够的有效内存,这些应用程序和虚拟内存管理器交互来增加他们的工作集,并且当操作系统给出信号的时候整理他们的工作集。这些应用程序依赖于内存-所在的缓存缓冲区来减少到磁盘的I/O。因此作为结果就是内存将总是看起来是满的。

 

本文转译自AskPerf的博客文章, 原文链接如下:

https://blogs.technet.com/b/askperf/archive/2008/01/29/an-overview-of-troubleshooting-memory-issues-part-two.aspx