翻译:飞哥 ( http://hi.baidu.com/imlidapeng )

版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明。

原文名称:《Linux Performance and Tuning Guidelines》

原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html

-------------------------------------------------------------------------------------------

对服务器来说主要的角色就是应用服务器或数据库服务器,CPU作为关键资源经常成为性能瓶颈的根源。
​CPU使用率高并不总是意味着CPU工作繁忙,它有可能是正在等待其他子系统。
​在进行性能分析时,将所有子系统当做一个整体来看是非常重要的,因为在子系统中可能会出现瀑布效应。

注释:有种常见的错误观念认为CPU是服务器中最重要的。
​情况不总是这样,服务器经常是CPU的配置高,硬盘、内存和网络子系统是低配置。
​只有一些特定对CPU要求高的应用程序才能真正充分利用当今的高端处理器。

​3.2.1 发现CPU瓶颈

有多种方法可以来确认CPU瓶颈。
​在第二章“监控和基准工具”中介绍到,Linux有很多工具帮助我们确认瓶颈,问题是使用哪一个。
​其中一个工具是uptime。

​通过分析uptime输出,我能对在过去15分钟所发生的事情有个粗略的了解。关于此工具的更多说明,参见2.3.3“uptime”。

​例子3-1:一个系统CPU资源紧张的uptime输出结果
----------------------------------------------------------------------------------------
18:03:16 up 1 day, 2:46, 6 users, load average: 182.53, 92.02, 37.95
----------------------------------------------------------------------------------------

使用KDE System Guard和CPU传感器可以让你了解当前CPU的工作负载。

提示:小心不要因为同时运行过多的工具而导致CPU问题。你可能发现当同时使用多个不同监控工具时会使CPU负载过高。

​使用top,你可以看到CPU使用率及主要是哪些进程引起问题(例子2-1)。
​如果你已安装sar,搜集了包括CPU使用率的信息。
​但分析这些信息是很困难的,所以要使用isag,它可以将sar的输出转换成图形。
​否则你可以通过脚本解析这些信息并使用电子表格绘制CPU使用率的趋势图。
​你也可以在命令行中输入sar -u或者sar -U processornumber。
​要获得比单单CPU子系统更多关于系统及当前使用率的信息,一个不错的工具就是vmstat(参见2.3.2,“vmstat”)

​3.2.2 SMP

基于SMP的系统会出现其特有且难于检测的问题。在SMP环境中,有个叫CPU亲和力【affinity】的概念,它允许你将一个进程绑定到指定的CPU。

主要用途是这有利于CPU cache的优化,它通过让进程在同一CPU运行代替在处理器间移动来实现。
​当进程在CPU间移动时,新CPU的cache会被清空。
​因此一个进程在处理器间移动会发生多次cache清空,这意味着一个单独的进程会花费更多的时间才能完成。
​这种情况非常难于发现,因为在监控时CPU负载可能非常均衡,不一定会出现某个CPU达到峰值的情况。
​亲和力在基于NUMA的系统中也很有用如IBM System x 3950,where it is important to keep memory, cache, and CPU access local to one another.

​3.2.3 性能调校选项

首先要确认系统性能问题是由CPU导致的而不是其他子系统。
​如果处理器为服务器瓶颈,可以通过相应调整来改善性能,
​这包括:

▶ 使用ps -ef命令确保没有不必要的程序在后台运行。如果发现有不必要的程序,将其停止并使用cron将其安排在非高峰期运行。

▶ 通过使用top命令找出非关键性且消耗CPU较多的进程,并使用renice命令修改它们的优先级。

▶ 在基于SMP的机器中,尝试使用taskset将进程绑定到指定的CPU,确保进程不需要在处理器间忙碌,从而导致多次cache清空。

▶ 对于正在运行的应用程序,最好的办法是纵向升级(提升CPU频率)而不是横向升级(增加CPU数量)。
​    这取决于你的应用程序是否能使用到多个处理器。例如一个单线程应用程序的升级方式最好是更换成更快的CPU而不是增加为多个CPU。

▶ 通常的做法还包括确认你所使用的是最新的驱动程序和韧体,因为这会影响CPU的负载。

《Linux 性能及调优指南》3.2 CPU瓶颈的更多相关文章

  1. 《Linux 性能及调优指南》写在后面的话

    感谢飞哥的翻译. 目前飞哥 (http://hi.baidu.com/imlidapeng)的网址已经不能访问了. <Linux 性能及调优指南>这本书的原文地址:http://www.r ...

  2. 《linux性能及调优指南》 3.5 网络瓶颈

    3.5 Network bottlenecks A performance problem in the network subsystem can be the cause of many prob ...

  3. 《Linux 性能及调优指南》2.3 监控工具

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  4. 《Linux 性能及调优指南》1.5 网络子系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  5. 《Linux性能及调优指南》1.3 Linux文件系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  6. 《Linux 性能及调优指南》1.4 硬盘I/O子系统

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  7. 《Linux 性能及调优指南》3.1 确认瓶颈

    翻译:飞哥 ( http://hi.baidu.com/imlidapeng ) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance ...

  8. Linux性能及调优指南1.2之Linux内存架构

    本文为IBM RedBook的Linux Performanceand Tuning Guidelines的1.2节的翻译原文地址:http://www.redbooks.ibm.com/redpap ...

  9. 《Linux 性能及调优指南》1.6 了解Linux性能指标

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

  10. 《Linux性能及调优指南》第二章:监控和基准工具2.1-2.2

    翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance a ...

随机推荐

  1. Mybatis中在log日志或控制台打印执行的sql

    最近在调试代码时,需要查看当前操作执行的sql,在日志里没查到,经过修改logback配置后成功,现记录如下:一.Mybatis版本是3.0.6(我正在用的版本)该版本只需要修改logback.xml ...

  2. perventDefault, stopPropagation, stopImmediatePropagation 三者的区别

    event有三种特别容易混淆的方法, 用来阻止默认事件的发生 1.  e.preventDefault(); 2. e.stopPropagation(); 3. e.stopImmediatePro ...

  3. es高级部分

    1 关于机器 配置. 内存:上亿的数据一般需要64G内存的服务器.劲量不要使用小于32G 内存的服务器. cpu:es 对cpu 要求依赖不如内存.一般要求2-8 核就可以了. 磁盘:es 对磁盘依赖 ...

  4. 什么情况下,英文单词中的k发音变g,t发音变d,p发音变b

    当k,t,p在s发音的后面,且在重读音节中,k,t,p就要发相对应的浊辅音g,d,b.

  5. spring-AOP框架(基于AspectJ注解配置AOP)

    基于AspectJ注解配置AOP 1.加入jar包: 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar.aspectj.w ...

  6. Micro QR 和QR码

    QRcode.com 什么是QR码 QR码的种类 如何导入 QR码的成功之路 常见问题解答 咨询 Language   Micro QR码 返回 QR码的种类 首页 二维码上只有一个定位图案,这就是M ...

  7. 一个OpenGL小程序

    发个没什么技术含量的文,最近准备通过opengl的学习来好好c++,于是找了网上的教程来搭建opengl的编写环境,建了个空项目,又找了个案例稍微改了改运行了下,还成,ok了~喜不自禁~ 贴个图: 代 ...

  8. SpringBoot集成RabbitMQ

    官方说明:http://www.rabbitmq.com/getstarted.html 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ ...

  9. STL进阶--删除元素

    删除元素 从vector或deque删除元素 vector<int> vec = {1, 4, 1, 1, 1, 12, 18, 16}; // 删除所有的1 for (vector< ...

  10. react-router 4.x

    本次主要总结react中的路由的使用,实现让根组件根据用户访问的地址动态挂载不同的组件. 1,创建项目 首先使用命令 npx create-react-app react-router创建项目,然后n ...