专栏首页北京马哥教育《Linux 性能及调优指南》3.2 CPU瓶颈

《Linux 性能及调优指南》3.2 CPU瓶颈

对服务器来说主要的角色就是应用服务器或数据库服务器,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运维(magedu-Linux),作者:马哥教育

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux下的CPU使用率与服务器负载的关系与区别

    当我们使用top命令查看系统的资源使用情况时会看到load average,如下图所示,它表示系统在1,5,15分钟的平均工作负载。 那么什么是负载(l...

    小小科
  • 进程运行于不同的 CPU 核

    用 Gearman 搭建 Map/Reduce ,GearmanManager 来管理所有的 workers。启动多个 gearman-manager dae...

    小小科
  • 13 种在 Linux 系统上检测 CPU 信息的工具

    根据你的需要,有各种各样的关于你的CPU处理器信息你需要了解,比如CPU供应商名、模型名、时钟频率、插槽/内核的数量, L1/L2/L3缓存配置、可用的处理器...

    小小科
  • PowerVM虚拟化环境下 CPU 利用率的监控与探究

    本文主要介绍在 PowerVM 虚拟化环境下,微分区 CPU 利用率的监控方法,并且深入讨论在虚拟化环境下,CPU 的调度原理。 普通 LPAR CPU 利用率...

    魏新宇
  • Linux CPU 性能指标

    CPU性能指标可以从两方面来看:静态、动态 静态指标主要包括: CPU的型号、主频、核数、cache等 动态指标主要包括: CPU的平均负载状况、CPU...

    dys
  • 用 CPU 烤出来的肉,会特别香吗?

    众所周知,有一句话流传已久「显卡烧水,CPU 烤肉」。而最近有位网友(ytb:たれみみ親衛隊長)就认真实践了这一句,用 CPU 烤出来的肉是不是会特别好吃呢?

    HyperAI超神经
  • 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket

    当我们试着通过 Linux 命令 nproc 和 lscpu 了解一台计算机 CPU 级的架构和性能时,我们总会发现无法正确地理解相应的结果,因为我们会被好几个...

    IT大咖说
  • 了解一下CPU 第一篇(r4笔记第30天)

    CPU可能对于我们来说是熟悉又陌生的,每天的工作基本都离不开CPU,CPU的消耗是系统负载的一个重要指标,每天都会不定时的来看看CPU的使用情况,但是对于它了解...

    jeanron100
  • Linux查询CPU信息

    Tyan
  • 计算机基础 | 多核、缓存...现代CPU是如何工作的

    之前的文章《源代码如何被计算机执行》已经提到,对于一段源代码,计算机主要依靠编译器将源代码转化为CPU可以执行的程序。那么,CPU到底是如何工作的呢?本文将介绍...

    PP鲁

扫码关注云+社区

领取腾讯云代金券