1. 概述
应用的性能极限是服务等级协议中关注的重点。找到性能极限的关键在于知道该监控哪些数据、监控软件栈的哪些部分以及使用哪些工具。本篇文章将介绍需要监控的操作系统数据以及可用的操作系统性能监控攻击,还会给出一般性指导原则。主要涉及的操作系统是Windows 7和Ubuntu 12.04.5 LTS。我们更多的是介绍哪些是需要重点监控的系统属性以及为何要监控他们。
找到性能问题的第一步是监控应用的行为,通过监控提供的线索,可以将性能问题进行归类。
首先要给出几个概念的定义:性能监控,性能分析和性能调优。
性能监控:一种以非侵入方式收集或查看应用运行性能数据的活动。当应用爆出性能问题却没有足以定位根本原因的线索时,首先会进行性能监控,随后是性能分析;
性能分析:一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应性;
性能调优:一种为改善应用响应性或吞吐量而更改参数,源代码或属性配置的活动,性能调优通常是在性能监控或性能分析之后。
2. CPU
要使应用的性能或扩展性达到最高,就必须充分利用分配给它的CPU周期。特别需要注意的是:应用消耗很多CPU并不意味着性能或扩展性达到了最高。
大多数操作的CPU使用率分为用户态CPU使用率和系统态CPU使用率。用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比;系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或IO设备之间有大量的交互。
所以在理想状态下,应用达到最高性能和扩展性时,它的系统态CPU使用率是0%,所以提供应用性能和扩展性的一个目标是尽可能降低系统态CPU使用率。
2.1 监控CPU使用率:Windows 7
Windows上最常用的CPU使用率监控工具是Task Manager(任务管理器)和Performance Monitor(性能监控器)
2.1.1 任务管理器和性能监控器
任务管理器:
左上方CPU Usage(CPU使用率)显示了所有处理器CPU使用率的总和;
右上方CPU使用记录面板显示了每个处理器CPU使用率的历史信息,绿色线代码用户态和系统态CPU使用率的总和,红色线是系统态CPU使用率,上下两线之间的差就是用户态CPU使用率。(必须勾选菜单“查看”->“显示内核时间”才能显示系统态CPU使用率)
性能监控器:右键计算机->管理->系统工具->性能->监控工具->性能监控器
性能监控器使用了称为性能对象的概念,性能对象分为网络,内存,处理器,线程,进程,网络接口,逻辑磁盘等类别。每一类都含有特定的性能属性或计数器,可以作为监控的性能统计数据。
右键性能监控器的显示区域,在弹出菜单中选择Add Counters(添加计数器),选择性能对象Processor,选择计数器%User Time和%Privileged Time在点击Add按钮,即可监控用户态CPU使用率和系统态CPU使用率。注:Windows使用术语Privileged Time描述内核或系统态CPU使用率。如图:
如下是实际的监控数值:
本实例中的User Time高于Privileged Time,这和预想的结果一致,即执行应用程序代码的时间超过执行操作系统内核代码的时间。
2.1.2 Windows typeperf
Windows typeperf是收集操作系统性能统计数据的命令行工具。
如果要监控User Time和Privileged Time可以使用如下命令:
typeperf "\Processor(_Total)\% User Time" "\Processor(_Total)\% Privileged Time"
输出的第一行是表头,描述所采集的数据。下面几行是数据,每行的日期时间戳标示采集相应性能计数器值的时间点,默认情况下,typeperf的报告间隔是1秒,-si可以设置间隔。