Linux性能优化之中断

写在前面

本文看下中断相关内容。

1:什么是中断?

中断是一种异步的事件通知机制,用来接收来自外部的数据输入,如键盘,网卡等。收到中断后,首先执行硬中断,主要是读取数据到内存中,这个过程很快,并且会关闭中断,即此期间不会响应新的中断信号。接着是发送软件中断信号,执行软中断过程,这个过程由专门的内核线程来执行,一般名称是ksoftirqd/[CPU编号]。在实际的生产环境中,一般我们遇到的就是网卡的中断,所以本文来看个网卡中断的例子来加深理解。

2:实际案例

我们需要准备两个vm,一个vm运行ng服务,模拟一个web服务器,一个vm通过hping3命令来模拟大量的网络请求。

首先启动ng:

复制代码
# 运行Nginx服务并对外开放80端口
$ docker run -itd --name=nginx -p 80:80 nginx

验证下:

复制代码
$ curl http://192.168.0.30/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

一般没有啥问题。

接着我们在另一个vm来模拟大量网络请求:

复制代码
root@hellohp:/home/dongyunqi# hping3 -S -p 80 -i u100 192.168.170.128
len=46 ip=192.168.170.128 ttl=63 DF id=0 sport=80 flags=SA seq=4280 win=64240 rtt=1.8 ms
len=46 ip=192.168.170.128 ttl=63 DF id=0 sport=80 flags=SA seq=4281 win=64240 rtt=1.6 ms
...

此时如果一切正常的话,网络层面就会出问题了,对应到生产及环境的话,可能就是业务该反馈各种数据不及时啊,状态不对啊,等问题了,都是因为网卡消息过多,软中断过多,软中断线程处理不过来导致的了。接着我们来把其当作黑盒继续看下。

既然系统出现问题了已经,自然要先来top看下,哪些指标异常了:

负载正常,cpu利用率正常,任务也正常,但是就是有一个内核软中断的线程占用的cpu利用率比较高,也就是上图红框里的,说明可能是有大量的软中断在不断发生,可以看下proc文件系统,通过命令watch -d "/bin/cat /proc/softirqs | /usr/bin/awk 'NR == 1{printf \"%13s %s\n\",\" \",\$1}; NR > 1{printf \"%13s %s\n\",\$1,\$2}'":

NET_RX是网络收包软中断,NET_TX是网络发包软中断,其他的都是内核的软中断,一般不会有问题,可以忽略。

既然确认是网络收包,就可以来看下来自哪些主机的包多了,通过命令root@hellohp:/proc# tcpdump -i ens33 -n tcp port 80

复制代码
root@hellohp:/proc# tcpdump -i ens33 -n tcp port 80
10:50:35.778181 IP 192.168.170.129.8294 > 192.168.170.128.80: Flags [R], seq 1553464501, win 0, length 0
10:50:35.778181 IP 192.168.170.129.8295 > 192.168.170.128.80: Flags [R], seq 716403946, win 0, length 0
10:50:35.778181 IP 192.168.170.129.8296 > 192.168.170.128.80: Flags [R], seq 1660577291, win 0, length 0
10:50:35.778262 IP 192.168.170.128.80 > 192.168.170.129.8298: Flags [S.], seq 1277770738, ack 1834335578, win 64240, options [mss 1460], length 0
...

可以看到来自192.168.170.129.8296的包最多,如果确认其有问题的话,加到黑名单或者是其他方案处理掉就行了。

写在后面

参考文章列表

linux的中断分析(硬中断和软中断)

相关推荐
艾德金的溪3 分钟前
windows安装CC Switch
运维·ai
2023自学中6 分钟前
Linux 内核与用户空间 内存管理详解(堆与栈篇)
linux·嵌入式·内存·开发板
极客先躯6 分钟前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme8 分钟前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
似水এ᭄往昔12 分钟前
【Linux系统编程】--虚拟地址空间
linux·服务器
不会C语言的男孩14 分钟前
Linux 系统编程 · 第 3 章:文件 I/O 基础
linux·服务器
运维老郭22 分钟前
Kubernetes 二进制部署完全指南:从零搭建生产级HA集群
运维·云原生·kubernetes
MXsoft61834 分钟前
## 告警治理:从“风暴”到“精准”——运维告警压缩与根因定位实践指南
运维
cfm_291441 分钟前
JVM垃圾收集算法与收集器深度解析
jvm·测试工具·算法·性能优化
MXsoft61843 分钟前
**智慧校园哑终端监控:摄像头、门禁、信息屏的统一管理实践**
运维