本文是通过学习倪朋飞老师的《Linux性能优化实战》 :系统的软中断CPU使用率升高,我该怎么办?
系统的软中断CPU使用率升高,我该怎么办?
前言
中断是一种异步的事件处理机制,用来提高系统的并发处理能力。中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分。
- 上半部对应硬中断,用来快速处理中断
- 下半部对应软中断,用来异步处理上半部未完成的工作
Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型,我们可以查看 proc 文件系统中的 /proc/softirqs ,观察软中断的运行情况。
在 Linux 中,每个 CPU 都对应一个软中断内核线程,名字是 ksoftirqd/CPU 编号。当软 中断事件的频率过高时,内核线程也会因为 CPU 使用率过高而导致软中断处理不及时,进 而引发网络收发延迟、调度缓慢等性能问题。
软中断 CPU 使用率过高也是一种最常见的性能问题。下面我们就用最常见的反向代理服务器 Nginx 的案例,来学会分析这种情况。
案例
预先安装 docker、sysstat、sar 、hping3、tcpdump 等工具。
- sar 是一个系统活动报告工具,既可以实时查看系统的当前活动,又可以配置保存和报 告历史统计数据。
- hping3 是一个可以构造 TCP/IP 协议数据包的工具,可以对系统进行安全审计、防火墙 测试等。
- tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题。
本次案例用到两台机器,用一张图来表示它们的关系。

可以看到,其中一台虚拟机运行 Nginx ,用来模拟待分析的 Web 服务器;而另一台当 作 Web 服务器的客户端,用来给 Nginx 增加压力请求。使用两台虚拟机的目的,是为了 相互隔离,避免“交叉感染”。
接下来,我们打开两个终端,分别 SSH 登录到两台机器上,并安装上面提到的这些工具。
操作和分析
在客户端机,使用 curl 访问 Nginx 监听的端口,确认 Nginx 正常启动。
# curl http://192.91.16.101
<!DOCTYPE html>
<html>
<head>
<title>Nginx</title>
<meta charset="utf-8">
<meta name="author" content="Licess">
</head>
<body>
<div id="main">
<div align="center"><b欢迎访问nginx</b></div>
</div>
</body>
</html>
接着,还是在第客户端机,我们运行 hping3 命令,来模拟 Nginx 的客户端请求:

本文通过实例分析了Linux系统中软中断CPU使用率升高的问题,探讨了中断处理机制,尤其是软中断上下半部的概念。通过使用sar、tcpdump等工具,发现并确认了由SYNFLOOD攻击导致的网络接收小包问题,从而影响了系统性能。解决方案包括监控网络流量,优化网络配置,防止恶意攻击。
最低0.47元/天 解锁文章
1958

被折叠的 条评论
为什么被折叠?



