转载:关于CPU使用率应用的误区和错误

上一篇 / 下一篇  2010-06-24 14:15:21

错误的做法

获取对称式多处理器的服务器节点的系 统CPU使用率。(对称式多处理器:一个有多内核并且共享内存、总线和IO资源的CPU。)

 

大多数性 能分析师或测试员通常的做法是:在压 力测试期间,仅仅获取一个多内核服务器系统级的CPU使用率,就 开始分析结果。用像LoadRunner这种工 具获取你的UNIX/LINUX服务器系统的CPU使用率,是 个非常大的误区。结果导致引起瓶颈原因的错误解析,错误的解决方 案和为试图解决它而做的努力徒劳。

 

不同的软 件,如数据库、中间件,拥有他们自己处理多核、多CPU的私有算法。

在负载均衡测试中,当你观察到系统CPU使用率在 一个临界值下,这不总是意味着每个独立的内核都被平均加压。让我们举个例子:如果你注意到某个负载测试工具显示CPU使用率是25%,且假设这个服务器有四个处理 器,这并不意味着所有的内核都被进程/线程平均负载。一个单独的内核可能被100%消耗 了,而其他的内核则被100%闲置了。

 

使每个独立内核,平均或成比例的承担负载,依赖于应 用程序的并行性。及测试软件是否有能力在SMP内核之间处 理内部并行的查询。例如:Oracle支持内部并行查询。(例:在SMP模式下,把 单一或独立查询的工作分给两个或更多内核处理,是可行的。) 而MySQL数据库则不提供此功能,结果独立查询将只被一个内核处理,即使这个CPU的使用率已经接近临界值。

 

另一个例子:你可能注意到,当执行负载测试时,一些和缓慢查询相关的事务,在数据库端奇异的失败了, 即便CPU使用率在临界值内。现在,如果你深入挖掘这些缓慢查询,并把它和每个独立内核的CPU使用率相关联,你就可以看到,一些内核已经达到最大的100%,而其他却仍然在临界值内。这就是引起 该问题的本质原因。

 

相关链接:

http://oreilly.com/catalog/oraclepp/chapter/ch01.html

http://www.forsythesunsolutions.com/node/73

 

衡量独立内核/CPU使用率的推荐工具:

Prstat

属性 -m-ml):可用于Solaris操作系统。允许你衡量每个线程的CPU使用率。

 

mpstat:

可用于基于linux/unix的操作系统。MpstatSysstat工具的一部分

 

System Monitor:系统监控

基于界 面的工具可用于Red HatLinux操作系统。

 

相关链接

http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html

 

错误的观念

监控工具显示的100%CPU使 用率可能是误导。在这种情况下,我可以坦率的告诉你-'Seeing is not believing!'(看到的并非就是可信的)。你可能对着监控器抓破脑袋,苦思冥想,因为找不到可行方案,来解决所观察的某些服务器的高CPU使用率问题。你的服务器可能消耗100%使用率, 而负载却不可思议的低。

 

然而,好消息是使用率100%,并不总 是意味着CPU就是性能瓶颈,尤其是在UNIX/LINUX操作系统下。除非,你看到vmstatr值(进程队列),超出了SMP服务器的CPU数量。例如:如果r=5,而你的SMP只有4CPU或内核,那这绝对是瓶颈。队列的意思是,如果CPU不忙,当一个线程进入运行/处理队列(r)时,它立即会被一个CPU处理。但是,如果所有可用的CPU都忙于处理 线程,后来进入的线程就只能在进程队列中等待,直到有可用的CPU来处理这些等待的线程。

 

这说明,当你看到一个非常高的CPU值警报时,问问自己:CPU使用率是什 么?

答案:CPU使用率=100%-%花在空闲业务的时间)

如果你理解了上述方程式,你就永远不会再在CPU使用率上迷失。

 

误区

上面提到的另一个误解是:高CPU使用率导致 了缓慢的处理速度。

事实是:错。高CPU使用率不会 拖慢应用程序处理速度。这只是另一个谬论。分析上诉方程式,并去除这个观念。CPU使用率和处 理速度并无关系。

 

当到了分析和CPU严格相关资源的时候,工程师们 往往忘记了,一个操作系统的调度或策划处理的基本法则是:确保CPU使用率在需要的时候尽可能的高。 通常情况下,CPU运行在固定的时钟频率和固定速度的工作单位中。如果你理解了上述提到的规则,你就会意识到,处理速度和CPU使用率没有任何直接关系。无论CPU使用率是10%,还是100%,处理器总是会以相同的速度处理单 位工作。只有当等待CPU处理的进程/线程数总数,超过了SMP/服务器端所有可用的处理器时,线程/进程的执行速 度才受影响。再次强调,下次在负载测试/性能测试时,不要忘记密切关注r(运行队列)值。


参考:
http://www.test8848.net/html/63/n-3763.html
http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html

TAG:

athukira的个人空间 引用 删除 athukira   /   2010-06-24 18:09:07
5
athukira的个人空间 引用 删除 athukira   /   2010-06-24 18:08:57
【CPU使用率和处理速度并无关系。只有当等待CPU处理的进程/线程数总数,超过了SMP/服务器端所有可用的处理器时,线程/进程的执行速度才受影响。】

这个是精华。
 

评分:0

我来说两句

Open Toolbar