关于CPU使用率应用的误区和错误(译文)
来源:互联网 发布:淘宝新品打标时间 编辑:程序博客网 时间:2024/06/05 17:58
转自7点: http://bbs.7dtest.com/thread-3668-1-1.html
译者: kaixin322 原作者:Chaitanya M Bhatt
谈起这个话题,盛行着很多误区、误解、错误观念。在这里,我将涉及到几个关键问题,并力争解释详细的事实及最佳做法。
错误的做法
获取对称式多处理器的服务器节点的系统级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的操作系统。(注:Mpstat是Sysstat工具的一部分)
System Monitor:(系统监控)
基于界面的工具,可用于Red Hat Linux 操作系统。
相关链接:
http://www.cyberciti.biz/tips/ho ... pu-utilization.html
错误的观念
监控工具显示的100%CPU使用率可能是误导。在这种情况下,我可以坦率的告诉你-'Seeing is not believing!'(看到的并非就是可信的)。你可能对着监控器抓破脑袋,苦思冥想,因为找不到可行方案,来解决所观察的某些服务器的高CPU使用率问题。你的服务器可能消耗100%使用率,而负载却不可思议的低。
然而,好消息是使用率100%,并不总是意味着CPU就是性能瓶颈,尤其是在UNIX/LINUX操作系统下。除非,你看到vmstat里‘r’值(进程队列),超出了SMP服务器的CPU数量。例如:如果r=5,而你的SMP只有4个CPU或内核,那这绝对是瓶颈。队列的意思是,如果CPU不忙,当一个线程进入运行/处理队列(r)时,它立即会被一个CPU处理。但是,如果所有可用的CPU都忙于处理线程,后来进入的线程就只能在进程队列中等待,直到有可用的CPU来处理这些等待的线程。
这说明,当你看到一个非常高的CPU值警报时,问问自己:CPU使用率是什么?
答案:CPU使用率=100%-(%花在空闲业务的时间)
如果你理解了上述方程式,你就永远不会再在CPU使用率上迷失。
误区
上面提到的另一个误解是:高CPU使用率导致了缓慢的处理速度。
事实是:错。高CPU使用率不会拖慢应用程序处理速度。这只是另一个谬论。分析上诉方程式,并去除这个观念。CPU使用率和处理速度并无关系。
当到了分析和CPU严格相关资源的时候,工程师们往往忘记了,一个操作系统的调度或策划处理的基本法则是:确保CPU使用率在需要的时候尽可能的高。通常情况下,CPU运行在固定的时钟频率和固定速度的工作单位中。如果你理解了上述提到的规则,你就会意识到,处理速度和CPU使用率没有任何直接关系。无论CPU使用率是10%,还是100%,处理器总是会以相同的速度处理单位工作。只有当等待CPU处理的进程 /线程数总数,超过了SMP/服务器端所有可用的处理器时,线程/进程的执行速度才受影响。再次强调,下次在负载测试/性能测试时,不要忘记密切关注“r”(运行队列)值。
相关链接:
http://blogs.sun.com/partnertech ... _process_monitoring
http://www.dba-oracle.com/t_monitoring_unix_cpu.htm
- 关于CPU使用率应用的误区和错误(译文)
- 关于CPU使用率的代码
- Android 查看应用的CPU使用率
- 如何获取CPU的主频和使用率?
- Linux中CPU负载和CPU使用率表示的含意
- Linux中CPU负载和CPU使用率表示的含意
- cpu的使用率
- CPU使用率的计算
- cpu使用率的计算
- CPU使用率的计算方法
- 获取CPU的使用率
- 设备 应用内存,CPU使用率
- Android获取应用cpu使用率
- linux收集memory使用率和cpu使用率
- 关于Win7 NT Kernel cpu 使用率过高的解决方法
- 关于创建线程后CPU使用率100%的问题
- 获取系统的CPU使用率、内存使用率
- 获取内存和CPU使用率
- 用rational rose 2003 设计商业销售系统
- mootools将表单变成json格式 【转】
- (转)程序员眼中的UML (1)
- 中了autorun木马
- CString类成员函数详解
- 关于CPU使用率应用的误区和错误(译文)
- ext中FormPanel的文件域操作
- VC++动态链接库(DLL)编程详文
- (转)程序员眼中的UML (2)
- Mootools源码分析(四) ---- Array 【转】
- ubuntu8.10安装jdk-6u10-linux-i586.bin
- 面试题--计算给定日期和时间的下一秒
- sharepoint开发周记【2009.01.11--2009.01.15】
- 小伙遇劫头部重伤昏迷 父母欲放弃治疗捐其器官