Linux性能优化实战
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
23395 人已学习
课程目录
已完结 64 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 别再让Linux性能问题成为你的绊脚石
免费
01 | 如何学习Linux性能优化?
CPU 性能篇 (13讲)
02 | 基础篇:到底应该怎么理解“平均负载”?
03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
09 | 基础篇:怎么理解Linux软中断?
10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
12 | 套路篇:CPU 性能优化的几个思路
13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用perf工具分析Java程序?
内存性能篇 (8讲)
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
I/O 性能篇 (10讲)
23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)
25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘I/O延迟很高?
28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
29 | 案例篇:Redis响应严重延迟,如何解决?
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路
32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
网络性能篇 (13讲)
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
综合实战篇 (13讲)
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
加餐篇 (4讲)
加餐(一) | 书单推荐:性能优化和Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?
结束语 (1讲)
结束语 | 愿你攻克性能难关
Linux性能优化实战
登录|注册

11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?

倪朋飞 2018-12-14
你好,我是倪朋飞。
前几节里,我通过几个案例,带你分析了各种常见的 CPU 性能问题。通过这些,我相信你对 CPU 的性能分析已经不再陌生和恐惧,起码有了基本的思路,也了解了不少 CPU 性能的分析工具。
不过,我猜你可能也碰到了一个我曾有过的困惑: CPU 的性能指标那么多,CPU 性能分析工具也是一抓一大把,如果离开专栏,换成实际的工作场景,我又该观察什么指标、选择哪个性能工具呢?
不要担心,今天我就以多年的性能优化经验,给你总结出一个“又快又准”的瓶颈定位套路,告诉你在不同场景下,指标工具怎么选,性能瓶颈怎么找。

CPU 性能指标

我们先来回顾下,描述 CPU 的性能指标都有哪些。你可以自己先找张纸,凭着记忆写一写;或者打开前面的文章,自己总结一下。
首先,最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。
CPU 使用率描述了非空闲时间占总 CPU 时间的百分比,根据 CPU 上运行任务的不同,又被分为用户 CPU、系统 CPU、等待 I/O CPU、软中断和硬中断等。
用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高,通常说明有应用程序比较繁忙。
系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断)。系统 CPU 使用率高,说明内核比较繁忙。
等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比。iowait 高,通常说明系统与硬件设备的 I/O 交互时间比较长。
软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。
除了上面这些,还有在虚拟化环境中会用到的窃取 CPU 使用率(steal)和客户 CPU 使用率(guest),分别表示被其他虚拟机占用的 CPU 时间百分比,和运行客户虚拟机的 CPU 时间百分比。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(77)

  • 我来也
    [D11打卡]
    这简直就是小抄😁
    好像在我的场景中,使用老师提到的这些工具就够用了.
    先把这些性价比高的工具琢磨好了,以后有精力了再去学些小众的.
    感谢老师帮我们挑出了重点,哈哈!
    时间就是金钱啊,感谢老师帮我们节约时间,更高效的学习.👍

    作者回复: 😊

    2018-12-14
    21
  • 唯美
    老师,环境上有个tomcat ,用户cpu 一直是100%, 我用strace -c -p pid 命令,查到是 futex(0x402f4900, FUTEX_WAIT, 2, NULL,看到是futex 是linux 的用户空间 和系统空间的一种同步机制,这对于java 编写的tomcat ,怎么会造成这种问题,怎么理解呢? ,
    2018-12-15
    15
  • dongge
    这个专栏的这篇文章值一个亿

    作者回复: 谢谢😊

    2018-12-18
    10
  • Griffin
    哈哈哈,只有从一年级开始就当课代表才能总结的这么好。

    作者回复: 终于圆了当课代表的梦😂

    2018-12-23
    8
  • Kino
    这图可以抵掉无数加班夜。极客时间最贴心讲师!鉴定完毕。

    作者回复: 😊

    2019-05-16
    6
  • 每天晒白牙
    【D11打卡】
    总结篇文章,可以多看,多操作,遇到问题可以按照思路分析,慢慢内化成自己的思路

    作者回复: 👍

    2018-12-14
    4
  • 耿长学
    查看,分析,找到进程,找到函数
    2018-12-14
    3
  • LA
    老师,看了您的文章,有个问题一直在困扰这我。文章所说进程不可中断状态有可能是因为等待io响应,那这里的等待io响应包括等待从套接字读取数据么?如果是包括的话对于阻塞io来讲岂不是只要有阻塞进程就一直处在不可中断状态,从而无法被kill信号杀掉?

    作者回复: 不包括套接字

    2019-06-01
    2
  • 划时代
    整体回顾复习了实践案例,实践练习消化,CPU性能指标关系详解图很赞。

    作者回复: 😊

    2018-12-14
    2
  • 乖,摸摸头
    我一个开发人员,居然也买了

    作者回复: 👍咱们专栏开发人员很多的

    2019-07-28
    1
  • 学而不思则罔
    老师好,
    没太理解strace和perf的使用场景,文中说使用strace 分析系统调用情况,以及使用 perf 分析调用链中各级函数的执行情况。
    是否可以理解为当用户态cpu使用率高时,使用perf进行分析,而当内核态cpu使用率高时,使用strace分析系统调用呢?
    谢谢。

    作者回复: 可以,内核态CPU使用率高的时候也可以使用perf

    2019-05-23
    1
  • 童年的记忆🌾
    哎妈呀,本科4年,研究生2年,工作3年,这是我遇到的最优秀的老师了,没有之一。

    作者回复: 😊谢谢鼓励

    2019-05-19
    1
  • Maxwell
    CPU缓存命中率如何查看呢?

    作者回复: 内存模块有讲到

    2019-02-27
    1
  • 李丹鑫
    execsnoop这个怎么用呢。指教一下
    2018-12-31
    1
  • 风飘,吾独思
    打卡,总结的太好了
    2018-12-19
    1
  • 柏森森
    遇到一个问题:在做性能测试,相同配置,相同参数的2台机器,M1的CPU使用率比M2的高10%,后来用vmstat来查看发现,是用户态高了10%,这个有什么更好的办法来查吗
    2019-11-11
  • 李明华
    这些性能指标 如果做监控的话 监控指标 感觉获取不容易呀
    比如zabbix 比如promethes+grafana,
    这些指标好像很多需要手动写脚本获取才行吧???
    2019-10-12
  • 阿喀
    买个几次不同的课程, 这个真赞
    2019-09-30
  • AB
    老师,如果发现CPU等待IO时间非常久,buffer占用的空间由小,提高内存会不会缓解磁盘压力
    2019-09-24
  • Tao
    这篇文章老师很用心,辛苦啦
    2019-09-12
收起评论
77
返回
顶部