九、系统的软中断导致CPU使用率升高,我该怎么办?
案例运行环境
机器配置:2 CPU、8 GB 内存。
预先安装 docker、sysstat、sar 、hping3、tcpdump 等工具,比如 apt-get install docker.io sysstat hping3 tcpdump。
新工具
sar、 hping3 和 tcpdump:
- sar 是一个系统活动报告工具,既可以实时查看系统的当前活动,又可以配置保存和报告历史统计数据。
- hping3 是一个可以构造 TCP/IP 协议数据包的工具,可以对系统进行安全审计、防火墙测试等。
- tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题。
操作和分析
安装环境
# 运行Nginx服务并对外开放80端口 $ docker run -itd --name=nginx -p 80:80 nginx
确认 Nginx 正常启动
$ curl http://192.168.0.30/ <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ...
hping3模拟客户端请求
# -S参数表示设置TCP协议的SYN(同步序列号),-p表示目的端口为80 # -i u100表示每隔100微秒发送一个网络帧 # 注:如果你在实践过程中现象不明显,可以尝试把100调小,比如调成10甚至1 $ hping3 -S -p 80 -i u100 192.168.0.30
后面分析过程总忘记此操作,关注问题本身
top命令查看状态
# top运行后按数字1切换到显示所有CPU $ top top - 10:50:58 up 1 days, 22:10, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 122 total, 1 running, 71 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 0.0 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 3.3 si, 0.0 st %Cpu1 : 0.0 us, 0.0 sy, 0.0 ni, 95.6 id, 0.0 wa, 0.0 hi, 4.4 si, 0.0 st ...PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND7 root 20 0 0 0 0 S 0.3 0.0 0:01.64 ksoftirqd/016 root 20 0 0 0 0 S 0.3 0.0 0:01.97 ksoftirqd/12663 root 20 0 923480 28292 13996 S 0.3 0.3 4:58.66 docker-containe3699 root 20 0 0 0 0 I 0.3 0.0 0:00.13 kworker/u4:03708 root 20 0 44572 4176 3512 R 0.3 0.1 0:00.07 top1 root 20 0 225384 9136 6724 S 0.0 0.1 0:23.25 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd ...# top运行后按数字1切换到显示所有CPU $ top top - 10:50:58 up 1 days, 22:10, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 122 total, 1 running, 71 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, 0.0 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 3.3 si, 0.0 st %Cpu1 : 0.0 us, 0.0 sy, 0.0 ni, 95.6 id, 0.0 wa, 0.0 hi, 4.4 si, 0.0 st ...PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND7 root 20 0 0 0 0 S 0.3 0.0 0:01.64 ksoftirqd/016 root 20 0 0 0 0 S 0.3 0.0 0:01.97 ksoftirqd/12663 root 20 0 923480 28292 13996 S 0.3 0.3 4:58.66 docker-containe3699 root 20 0 0 0 0 I 0.3 0.0 0:00.13 kworker/u4:03708 root 20 0 44572 4176 3512 R 0.3 0.1 0:00.07 top1 root 20 0 225384 9136 6724 S 0.0 0.1 0:23.25 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
从第一行开始,逐个看一下:
- 平均负载全是 0,就绪队列里面只有一个进程(1 running)。
- 每个 CPU 的使用率都挺低,最高的 CPU1 的使用率也只有 4.4%,并不算高。
- 再看进程列表,CPU 使用率最高的进程也只有 0.3%,还是不高呀。
- 我们运行下面的命令:
$ watch -d cat /proc/softirqsCPU0 CPU1HI: 0 0TIMER: 1083906 2368646NET_TX: 53 9NET_RX: 1550643 1916776BLOCK: 0 0IRQ_POLL: 0 0TASKLET: 333637 3930SCHED: 963675 2293171HRTIMER: 0 0RCU: 1542111 1590625
通过 /proc/softirqs 文件内容的变化情况,你可以发现, TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)等这几个软中断都在不停变化。
其中,NET_RX,也就是网络数据包接收软中断的变化速率最快。而其他几种类型的软中断,是保证 Linux 调度、时钟和临界区保护这些正常工作所必需的,所以它们有一定的变化倒是正常的。
内核选项命令参数等汇总
sar
系统活动报告工具
hping3
tcp/ip测试工具
tcpdump
抓包工具
top
curl
watch
九、系统的软中断导致CPU使用率升高,我该怎么办?相关推荐
- linux 内核线程 软中断,Linux性能优化实战:系统的软中断CPU使用率升高,我该怎么办?(10)...
一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.g ...
- linux 使cpu使用率升高_关于linux系统CPU篇---gt;CPU使用率升高
1.CPU使用率为单位时间内CPU使用情况的统计,以百分比的方式展示. LINUX作为一个多任务操作系统,将每个CPU的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运 ...
- VAX计算机CPU,解决“系统”进程的高CPU使用率
要诊断CPU使用率问题,应使用Windows事件跟踪(ETW)捕获CPU采样数据/配置文件. Windows 10 WPT可以在Windows 8 / Server 2012,Windows 8.1 ...
- 10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
上一期我给你讲了软中断的基本原理,我们先来简单复习下. 中断是一种异步的事件处理机制,用来提高系统的并发处理能力.中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分. ...
- 系统的软中断CPU使用率升高,该怎么办?
中断是一种异步的事件处理机制,用来提高系统的并发处理能力.中断事件发生,会触发执行中断处理程序,二中断处理程序被分为上半部和下半部这两个部分. 上半部对应硬中断,用来快速处理中断: 下半部对应软中断, ...
- 系统的软中断CPU使用率升高,我该怎么办?
点击关注公众号,利用碎片时间学习 中断是一种异步的事件处理机制,用来提高系统的并发处理能力.中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分. 上半部对应硬中断,用来 ...
- linux 使cpu使用率升高_Linux系统中CPU占用率较高问题排查思路与解决方法
Linux服务器上出现CPU负载达到100%居高不下的情况,如果CPU 持续跑高,则会影响业务系统的正常运行: CPU利用率.根据经验来看,用户空间进程占用CPU比例在 65-70%之间,内核(系统) ...
- 理解Linux系统平均负载和CPU使用率
CPU 使用率 CPU 使用率就是 CPU 非空闲态运行的时间占比,它反映了 CPU 的繁忙程度.比如,单核 CPU 1s 内非空闲态运行时间为 0.8s,那么它的 CPU 使用率就是 80%:双核 ...
- linux 使cpu使用率升高_Linux程序性能优化:CPU的上下文切换
linux操作系统是将CPU轮流分配给任务,分时执行的.而每次执行任务时,CPU需要知道CPU寄存器(CPU内置的内存)和程序计数器PC(CPU正在执行指令和下一条指令的位置)值,这些值是CPU执 ...
最新文章
- v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...
- java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器
- feign调用走不走网关全局拦截_feign服务端出异常客户端处理的方法
- P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★
- hibernate 关联总结
- 027-日期和时间组件
- initializing mysql database:_安装MySQL 出现initializing database安装失败解决办法
- 76. Minimum Window Substring
- hbase/thrift/go连接失败
- java集合转js数值_前端js调用接口转换Map数组数据
- MATLAB语言初步学习(四)
- 苍南二职计算机专业分数线,苍南第二职业中专2021年招生录取分数线
- 快速了解SOLIDWORKS Simulation的有限元分析法
- retrofit简单的网络请求
- python兼职能挣多少钱-副业赚钱干货【4】Python程序员变现之路
- 利用Yocto构建嵌入式Linux教程01--第一个Yocto项目构建
- Android计步器算法实现(2)
- 网易邮箱出现 FA_INVALID_SESSION
- 小程序(十六)小程序仿微信聊天页面及功能
- 0基础java好学吗?完整学习路线图速收藏