10-案例篇:系统的软中断CPU使用率升高,我该怎么办?
中断
中断是一种异步的事件处理机制,用来提高系统的并发处理能力
中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分
1.上半部对应硬中断,用来快速处理中断
2.下半部对应软中断,用来异步处理上半部未完成的工作
Linux中的软中断包括网络收发、定时、调度、RCU 锁等各种类型
可以查看proc文件系统中的/proc/softirqs观察软中断的运行情况
在Linux中,每个CPU都对应一个软中断内核线程,名字是ksoftirqd/CPU编号
当软中断事件的频率过高时,内核线程也会因为CPU使用率过高而导致软中断处理不及时,
进而引发网络收发延迟、调度缓慢等性能问题
软中断CPU使用率过高也是一种最常见的性能问题
案例
实验环境
# 服务端(192.168.1.6)
配置:2CPU,4G内存,centos7.6_64
预先安装docker、tcpdump、sar等工具(yum install tcpdump、sar)
# 客户端(192.168.1.5)
配置:1CPU,2G内存,centos7.6_64
# 预先安装hping3工具
[root@local_deploy_192-168-1-5 ~]# yum install hping3 -y
工具介绍
sar 是一个系统活动报告工具,既可以实时查看系统的当前活动,又可以配置保存和报告历史统计数据
hping3 是一个可以构造TCP/IP协议数据包的工具,可以对系统进行安全审计、防火墙测试等
tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题
1.本次实验架构图

其中一台虚拟机运行Nginx ,用来模拟待分析的Web服务器
另一台当作Web服务器的客户端,用来给Nginx增加压力请求
2.在服务端,启动一个nginx应用
# 运行Nginx服务并对外开放80端口
[root@local_sa_192-168-1-6 ~]# docker run -itd --name=nginx -p 80:80 nginx
# 使用 curl 访问Nginx监听的端口,确认Nginx正常启动
[root@local_sa_192-168-1-6 ~]# curl http://192.168.1.6
Welcome to nginx!