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.本次实验架构图

image-20211117155641002

其中一台虚拟机运行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!