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性能优化实战
登录|注册

10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?

倪朋飞 2018-12-12
你好,我是倪朋飞。
上一期我给你讲了软中断的基本原理,我们先来简单复习下。
中断是一种异步的事件处理机制,用来提高系统的并发处理能力。中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分。
上半部对应硬中断,用来快速处理中断;
下半部对应软中断,用来异步处理上半部未完成的工作。
Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型,我们可以查看 proc 文件系统中的 /proc/softirqs ,观察软中断的运行情况。
在 Linux 中,每个 CPU 都对应一个软中断内核线程,名字是 ksoftirqd/CPU 编号。当软中断事件的频率过高时,内核线程也会因为 CPU 使用率过高而导致软中断处理不及时,进而引发网络收发延迟、调度缓慢等性能问题。
软中断 CPU 使用率过高也是一种最常见的性能问题。今天,我就用最常见的反向代理服务器 Nginx 的案例,教你学会分析这种情况。

案例

你的准备

接下来的案例基于 Ubuntu 18.04,也同样适用于其他的 Linux 系统。我使用的案例环境是这样的:
机器配置:2 CPU、8 GB 内存。
预先安装 docker、sysstat、sar 、hping3、tcpdump 等工具,比如 apt-get install docker.io sysstat hping3 tcpdump。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(78)

  • 倪朋飞 置顶
    统一回复一下终端卡顿的问题,这个是由于网络延迟增大(甚至是丢包)导致的。比如你可以再拿另外一台机器(也就是第三台)在 hping3 运行的前后 ping 一下案例机器,ping -c3 <ip>

    hping3 运行前,你可能看到最长的也不超过 1 ms:

    3 packets transmitted, 3 received, 0% packet loss, time 2028ms
    rtt min/avg/max/mdev = 0.815/0.914/0.989/0.081 ms

    而 hping3 运行时,不仅平均延迟增长到了 245 ms,而且还会有丢包的发生:

    3 packets transmitted, 2 received, 33% packet loss, time 2026ms
    rtt min/avg/max/mdev = 240.637/245.758/250.880/5.145 ms

    网络问题的排查方法在后面的文章中还会讲,这儿只是从 CPU 利用率的角度出发,你可以发现也有可能是网络导致的问题。
    2018-12-12
    1
    30
  • Days
    软终端不高导致系统卡顿,我的理解是这样的,其实不是系统卡顿,而是由于老师用的ssh远程登录,在这期间hping3大量发包,导致其他网络连接延迟,ssh通过网络连接,使ssh客户端感觉卡顿现象。

    作者回复: 正解👍

    2018-12-13
    23
  • 向阳胜
    搞运维好些年了。一些底层性能的东西,感觉自己始终是一知半解,通过这个专栏了解的更深入了,确实学到了很多。而且老师也一直在积极回复同学们的问题,相比某些专栏的老师发出来就不管的状态好太多。给老师点赞。

    作者回复: 也很高兴看到大家有所收获😊

    2018-12-27
    12
  • 卿卿子衿
    有同学说在查看软中断数据时会显示128个核的数据,我的也是,虽然只有一个核,但是会显示128个核的信息,用下面的命令可以提取有数据的核,我的1核,所以这个命令只能显示1核,多核需要做下修改

    watch -d "/bin/cat /proc/softirqs | /usr/bin/awk 'NR == 1{printf \"%13s %s\n\",\" \",\$1}; NR > 1{printf \"%13s %s\n\",\$1,\$2}'"

    作者回复: 谢谢分享

    2018-12-12
    11
  • 2xshu
    老师,网络软中断明明只占了百分之四左右。为什么终端会感觉那么卡呢?不是很理解这点呢

    作者回复: 参考置顶回复

    2018-12-12
    9
  • 赵强强
    倪老师,案例中硬中断CPU占用率为啥是0呢,硬中断和软中断次数不是基本一致的吗?
    2018-12-12
    1
    8
  • 我来也
    [D10打卡]
     "hping3 -S -p 80 -i u100 192.168.0.30" 这里的u100改为了1 也没觉得终端卡,top的软中断%si倒是从4%上升了不少,吃满了一个cpu.
    可能是我直接在宿主机上开终端的原因,本身两个虚拟机都在这个宿主机上,都是走的本地网络.
    本地网卡可能还处理的过来.
    -----------
    在工作中,倒是没有遇到小包导致的性能问题.
    也许是用户数太少,流量不够.[才二三十兆带宽], 也许是之前发生了,自己并不知道.
    在工作中遇到的软中间导致的性能问题就是上期说的usleep(1)了.
    -----------
    本期又学到新东西了:
    1.sar 原来可以这么方便的看各网卡流量,甚至是网络帧数.
    到目前为止,我都是用的最原始的方法:在网上找的一个脚本,分析ifconfig中的数据,来统计某个网卡的流量.一来需要指定某个网卡(默认eth0),二来显示的数据不太准确且不友好(sleep 1做差值).
    2.nping3 居然可以用来模拟SYN FLOOD. (不要用来做坏事哦)
    3.tcpdump 之前有所耳闻. 用的不多. 平常有解包需求,都是在windows下用wireshark,毕竟是图形界面.
    -----------
    有同学说"仅凭tcpdump发现一个syn包就断定是SYN FLOOD,感觉有些草断"
    我是这样认为的:
    你tcpdump 截取一段时间的日志, 除去正常的流量, 着重分析异常的,再根据ip来统计出现的次数, 还是可以合理推理出来老师结论的.
    毕竟平常不会有哪个ip每秒产生这么多的syn,且持续这么长时间.

    作者回复: 👍

    最后一个问题其实前面已经看到PPS了

    2018-12-12
    4
  • 黄海峰
    这真是非常干货和务实的一个专栏,这么便宜,太值了。。。

    作者回复: 😊

    2018-12-12
    4
  • xfan
    ssh的tty其实也是通过网络传输的,既然是经过网卡,当然会卡,这就是攻击所带来的结果

    作者回复: 对的

    2018-12-12
    2
  • Vicky🐣🐣🐣
    1. 网络收发软中断过多导致命令行比较卡,是因为键盘敲击命令行属于硬中断,内核也需要去处理的原因吗?
    2. 观察/proc/softirqs,发现变化的值是TIMER、NET_RX、BLOCK、RCU,奇怪的是SCHED一直为0,求老师解答

    作者回复: 我们是SSH登陆的机器,还是走网络而不是键盘中断😓

    2018-12-12
    2
  • 王星旗
    hping3 -S --flood -p 80 ip,这样压力更大,哈哈

    作者回复: 👍

    2019-06-11
    1
  • 几叶星辰
    怎么让网卡中断平衡呢,可以请教下linux 2.6.40。中断平衡问题吗,以及内核版本更高的版本?

    作者回复: 配置 smp_affinity 或者开启 irqbalance 服务

    2019-01-24
    1
  • 男人十八一枝花
    cat /proc/softirqs时我有4个cpu,可用
    watch -d "/bin/cat /proc/softirqs | /usr/bin/awk 'NR == 1{printf \"%-15s %-15s %-15s %-15s %-15s\n\",\" \",\$1,\$2,\$3,\$4}; NR > 1{printf \"%-15s %-15s %-15s %-15s %-15s\n\",\$1,\$2,\$3,\$4,\$5}'"
    查看

    作者回复: 谢谢分享👍 不懂awk的赶紧去学习😊

    2018-12-17
    1
  • Vicky🐣🐣🐣
    执行了一下hping3,机器直接卡死了,登录不上去了,哈哈

    作者回复: 可能太猛了,调整下参数再试试

    2018-12-12
    1
  • chenjt
    同问,这种情况下cpu使用率这么低,为什么会感到卡顿呢

    作者回复: 参考置顶回复

    2018-12-12
    1
  • bluefantasy1
    老师,既然软中断并没有占用太多cpu资源,为啥会影响其他任务的性能?

    作者回复: 参考置顶回复

    2018-12-12
    1
  • zqing
    同问:老师,网络软中断明明只占了百分之四左右。为什么终端会感觉那么卡呢?不是很理解这点呢

    作者回复: 参考置顶回复

    2018-12-12
    1
  • Ethan
    在centos 7下,使用hping3,完全感觉不到慢,就是网络可能会丢包而已,其实是网络问题不是CPU使用率或者软中断导致的问题。
    2019-09-09
  • Abu
    请问老师,中断打散是否可以将/proc/interrupts文件里面的中断号取出来,然后以round robin方式平均分到所有CPU core上面呢?
    2019-09-07
  • lumence
    是不是不能用内网网卡来测。我docker的ip是 172.17.0.2。可是我开启 -i u1 或者 --flood 依然没有卡顿现象
    sudo hping3 -S -p 80 --flood 172.17.0.2
    HPING 172.17.0.2 (docker0 172.17.0.2): S set, 40 headers + 0 data bytes
    hping in flood mode, no replies will be shown
    2019-08-15
收起评论
78
返回
顶部