您的位置:首页 > 其它

Use PerfMon to Diagnose Common Server Performance Problems

2016-11-29 17:35 309 查看
原文:点击打开链接

假如您周一早晨刚到办公室就遇到一位心急如焚的用户抱怨自己的服务器运行速度太慢。您会如何着手帮助他?性能

监视器是 Windows® 中内置的一款非常便利的工具,可帮助您诊断有关性能的问题。

要使用“性能监视器”,您可以在命令提示符下键入 perfmon,或从“管理工具”菜单中选择“性能”或“可靠性和性能监视器”(在 Windows Vista® 和 Windows Server® 2008 中)。要添加需要监视的性能计数器和对象,只需单击加号并从众多可能的选项中进行选择即可。

那么该如何测量服务器的脉搏呢?共有超过 60 个基本性能对象,每个对象又包含多个计数器。在本文中,我将介绍那些能够反映服务器最重要征兆的计数器,还将说明 Microsoft® 服务支持工程师在排除与性能相关的故障时最常使用的典型采样间隔。

当然,在故障排除时需要有一个基准来提供关键参考点。由于服务器负载取决于业务需求并且随着业务周期的不同而随时变化,因此必须根据指定期间内的常规工作负载建立一个基准。这将允许您据此观察其变更并确定其趋势。

使结果更具可读性

在对那些代表着最重要的服务器征兆的计数器进行深入分析之前,我首先向您介绍两个小技巧,它们可以帮助您更轻松地使用“性能监视器”来测量那些重要的服务器征兆。请注意,在 Windows Vista 和 Windows Server 2008 中用不到这些技巧;但如果在较早版本的 Windows 中运行“性能监视器”,那么这两个调整工具就可以派上大用场。

第一个技巧是,您可以删除会对趋势线图形视图产生不利影响的所有示例干扰点。在 Windows Vista 和 Windows Server 2008 中,“性能监视器”最多可在图形视图中显示 1000 个数据点。但在先前版本的 Windows 中,最多只显示 100 个数据点。如果超过 100 个,“性能监视器”将把数据点“装进桶中”。一条竖直线代表一个桶,表示桶中包括的示例点的最小值、平均值和最大值。

图 1 中的图形所示,当同时显示如此多的数据时,一般很难发现趋势线。图 2 中的图形显示的是关闭了所有无关的可视信息后的情形,您可以看到这次非常容易地就可以捕捉到数据。有关如何关闭这些竖直线的详细信息,请参阅位于以下网址的知识库文章:support.microsoft.com/kb/283110


图 1 干扰桶显示出来时的性能数据(没有逗号分隔符)(单击该图像可查看大图)


图 2 较为清晰的数据视图(带有逗号分隔符)(单击此图像可查看大图)

第二个技巧是在数字中添加逗号分隔符,以便能够更轻松地读取计数器中显示的值。Windows Vista 和 Windows Server 2008 默认启用逗号分隔符。但是,在先前版本的 Windows 中,“性能监视器”默认情况下是不启用逗号分隔符的。

这听起来可能感觉差别并不太大,但请看一看图 1,它显示的是没有逗号分隔符的性能计数器,然后再看一看图 2,它显示的是使用逗号分隔符的计数器。我觉得后者的可读性要强得多。有关在 Windows XP 中向性能计数器添加逗号分隔符的一些简单说明,请查看位于以下网址的知识库文章:support.microsoft.com/kb/300884

测量对象和测量时间

当资源达到其容量限制时就会出现瓶颈,导致整个系统的性能减慢。产生瓶颈的原因通常是资源不足或配置错误、组件出现故障以及程序提出了错误的资源请求。

有五个主要资源领域可能会导致瓶颈现象并影响服务器的性能:物理磁盘、内存、进程、CPU 和网络。如果过量使用以上任意资源,服务器或应用程序的速度就可能会明显减慢甚至可能崩溃。我将逐一介绍这五个领域,提供有关计数器使用原则的指导以及提供测量服务器状态时采用的建议阈值。

由于采样间隔对日志文件的大小和服务器负载都具有非常重要的影响,因此应根据问题发生的平均消耗时间来设置采样间隔,以便能够在下次发生问题之前建立一个基准。这样您就可以找出导致问题的所有趋势。

在常规操作过程中,十五分钟是一个比较合适的建立基准的间隔。如果发生问题所消耗的时间平均约为四小时,则将采样间隔设置为 15 秒。如果发生问题的时间为八小时或更长,采样间隔时间不应少于五分钟;否则您会得到一个庞大的日志文件,致使数据分析变得异常困难。

硬盘瓶颈

由于磁盘系统存储和处理服务器上的程序和数据,因此影响磁盘使用情况和运行速度的瓶颈会极大地影响服务器的整体性能。

请注意,如果服务器尚未启用磁盘对象,则需使用命令行工具 Diskperf 来启用它们。另外还要注意,% Disk Time 可以超出 100%,因此我更倾向于使用 % Idle Time、Avg. Disk sec/Read 和 Avg. Disk sec/write 来更准确地了解磁盘的繁忙程度。在位于以下网址的知识库文章中,您可以找到更多有关 % Disk Time 的信息:support.microsoft.com/kb/310067

以下是 Microsoft 服务支持工程师用来监视磁盘的计数器。

LogicalDisk\% Free Space 它测量选定逻辑磁盘上的可用空间百分比。请注意,如果此值低于 15%,则表示可用空间不足,操作系统无法存储关键文件。一个最直接的解决方案是增加更多的磁盘空间。

PhysicalDisk\% Idle Time 它测量磁盘在采样间隔期间的空闲时间百分比。如果此计数器低于 20%,则表示磁盘系统处于满负荷状态。可考虑将当前的磁盘系统更换为速度更快的磁盘系统。

PhysicalDisk\ Avg.Disk Sec/Read 它测量从磁盘读取数据的平均时间(以秒为单位)。如果此数字大于 25 毫秒 (ms),则意味着从磁盘读取数据时磁盘系统发生了延迟。对于托管 SQL Server® 和 Exchange Server 的关键任务服务器,可接受的阈值要低得多,约为 10 ms。最合理的解决方案是将当前磁盘系统更换为速度更快的磁盘系统。

PhysicalDisk\ Avg.Disk Sec/Write 它测量将数据写入磁盘所需的平均时间(以秒为单位)。如果此数字大于 25 ms,则意味着写入磁盘时磁盘系统发生了延迟。对于托管 SQL Server 和 Exchange Server 的关键任务服务器,可接受的阈值要低得多,约为 10 ms。可能的解决方案是将当前磁盘系统更换为速度更快的磁盘系统。

PhysicalDisk\ Avg.Disk Queue Length 它表示目前正在等待硬盘变为可用的 I/O 操作数。如果此值大于心轴数加 2,则表示磁盘本身可能也是瓶颈。

Memory\Cache Bytes 它表示用于文件系统缓存的内存数量。如果此值大于 200MB,则可能存在磁盘瓶颈。

内存瓶颈

内存不足通常是由于 RAM 不足、内存泄漏或内存开关被放置在 boot.ini 中而导致的。在讨论内存计数器之前,我先介绍一下 /3GB 开关。

内存越多,磁盘 I/O 活动就越少,而应用程序的性能也会因此得以改善。在 Windows NT® 中引入了 /3GB 开关,用于为用户模式程序提供更多的内存。

Windows 使用 4GB 的虚拟地址空间(与系统拥有的物理 RAM 大小无关)。默认情况下,下面的 2GB 是为用户模式程序保留的,而上面的 2GB 是为内核模式程序保留的。通过使用 /3GB 开关,可将 3GB 用于用户模式进程。当然,这样做的代价是内核内存仅剩 1GB 的虚拟地址空间。这可能会产生一些问题,因为 Pool Non-Paged Bytes、Pool Paged Bytes、Free System Page Tables Entries 和桌面堆都争用这 1GB 的空间。因此,必须在环境中进行全面测试后才能使用
/3GB 开关。

如果怀疑自己遇到了与内存相关的瓶颈,可以考虑一下这一点。如果 /3GB 开关并非导致问题的症结,则可以使用以下计数器来诊断可能的内存瓶颈。

Memory\% Committed Bytes in Use 它测量 Committed Bytes 与 Commit Limit 的比值,换句话说,它测量的是使用中的虚拟内存数量。如果此数值大于 80%,则表示内存不足。对此最直接的解决方案是增加更多的内存。

Memory\% Available Mbytes 它测量可用于运行进程的物理内存量(单位为兆字节)。如果此值低于总物理 RAM 的 5%,则意味着内存不足,分页活动可能会增加。要解决此问题,应增加更多的内存。

Memory\Free System Page Table Entries 它表示系统当前并未使用的页表项数量。如果此数字小于 5,000,则很可能存在内存泄漏。

Memory\Pool Non-Paged Bytes 它测量非分页缓冲池的大小(单位为字节)。在这一系统内存区域中存储的是无法写入磁盘但只要已分配就必须保留在物理内存中的对象。如果此值大于 175MB(使用 /3GB 开关时大于 100MB),则可能存在内存泄漏。一个典型的事件 ID 2019 会记录在系统事件日志中。

Memory\Pool Paged Bytes 它测量分页缓冲池的大小(单位为字节)。在这一系统内存区域中存储的是在未使用时可以被写入磁盘的对象。如果此值大于 250MB(使用 /3GB 开关时大于 170MB),则可能存在内存泄漏。一个典型的事件 ID 2020 会记录在系统事件日志中。

Memory\Pages per Second 它测量为解决硬分页错误而从磁盘读取页或将页写入磁盘的速率。如果此值大于 1,000,则可能会由于过度分页而出现内存泄漏。

处理器瓶颈

处理器出现瓶颈可能是由于处理器本身没有足够的能力,或由于应用程序效率低下导致处理器能力不足。必须仔细检查处理器是否由于物理内存不足而不得不花费大量时间来执行分页。在调查可能的处理器瓶颈时,Microsoft 服务支持工程师使用以下计数器。

Processor\% Processor Time 它测量处理器用于执行非空闲线程的已用时间百分比。如果此值大于 85%,则表明处理器性能不足,可能需要为服务器配备速度更快的处理器。

Processor\% User Time 它测量处理器在用户模式下花费的已用时间百分比。如果此值较高,则表示服务器正忙于处理应用程序。一个可能的解决方案是优化会耗尽处理器资源的应用程序。

Processor\% Interrupt Time 它测量在特定的采样间隔期间处理器用于接收和处理硬件中断的时间。如果此计数器的值大于 15%,则表示可能存在硬件问题。

System\Processor Queue Length 它表示处理器队列中的线程数。如果此值经常比 CPU 数量的两倍还多,则表示服务器的处理器能力不足。

网络瓶颈

网络瓶颈顾名思义会影响服务器通过网络发送和接收数据的能力。原因可能是服务器的网卡存在问题,或者网络处于满负荷状态,需要对其进行分段。可使用以下计数器来诊断可能的网络瓶颈。

Network Interface\Bytes Total/Sec 它测量通过每个网络适配器发送和接收字节(包括分帧字符)的速率。如果发现使用的接口超过 70%,则表示网络处于满负荷状态。对于一个 100-Mbps 的 NIC 而言,使用的接口是 8.7MB/sec (100Mbps = 100000kbps = 12.5MB/sec* 70%)。出现这种情况时,可能需要添加一个速度更快的网卡或对网络进行分段。

Network Interface\Output Queue Length 它测量输出数据包队列的长度(以数据包为单位)。如果此值大于 2,则表示网络处于满负荷状态。可通过添加一个速度更快的网卡或对网络进行分段来解决此问题。

进程瓶颈

如果进程异常或未经优化,服务器性能将会受到严重影响。线程和句柄泄漏最终会使服务器速度减慢,过度使用处理器会使服务器变为爬行速度。在诊断与进程相关的瓶颈时,需要使用以下计数器。

Process\Handle Count 它测量某个进程当前打开的句柄总数。如果此计数器的值大于 10,000,则表示可能存在句柄泄漏。

Process\Thread Count 它测量某个进程中目前处于活动状态的线程数。如果在最小线程数和最大线程数之间此数值超过 500,则可能存在线程泄漏。

Process\Private Bytes 它表示此进程已分配的且无法与其他进程共享的内存数量。如果在最小线程数和最大线程数之间此数值大于 250,则可能存在内存泄漏。

结束语

现在,您已经了解了 Microsoft 服务支持工程师都使用哪些计数器来诊断各种瓶颈问题。当然,您很可能会定制一组自己喜欢的计数器来满足您的特定需求。在每次需要监视服务器时,您可能会希望能够不必每次都手动添加所需的计数器以节省时间。幸运的是,可通过“性能监视器”中的一个选项将所有计数器都保存在一个模板中供以后使用。

您可能还没搞清楚是应该在本地还是在远程来运行“性能监视器”。以及在本地运行“性能监视器”时究竟对性能有何影响。其实它们均取决于具体的环境。如果将间隔设为至少五分钟,则对服务器的性能影响几乎可以忽略不计。

如果知道服务器存在性能问题,则您可能希望在本地运行“性能监视器”,因为当服务器的资源即将耗尽时,“性能监视器”可能无法从远程机器捕获数据。实际上从中心计算机远程运行非常适合希望监视多台服务器或将其作为基准的情形。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐