1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 九 系统的软中断导致CPU使用率升高 我该怎么办?

九 系统的软中断导致CPU使用率升高 我该怎么办?

时间:2019-06-14 09:33:51

相关推荐

九 系统的软中断导致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$ toptop - 10:50:58 up 1 days, 22:10, 1 user, load average: 0.00, 0.00, 0.00Tasks: 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 USERPR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND7 root20 0 000 S 0.3 0.0 0:01.64 ksoftirqd/016 root20 0 000 S 0.3 0.0 0:01.97 ksoftirqd/12663 root20 0 923480 28292 13996 S 0.3 0.3 4:58.66 docker-containe3699 root20 0 000 I 0.3 0.0 0:00.13 kworker/u4:03708 root20 0 44572 4176 3512 R 0.3 0.1 0:00.07 top1 root20 0 225384 9136 6724 S 0.0 0.1 0:23.25 systemd2 root20 0 000 S 0.0 0.0 0:00.03 kthreadd...# top运行后按数字1切换到显示所有CPU$ toptop - 10:50:58 up 1 days, 22:10, 1 user, load average: 0.00, 0.00, 0.00Tasks: 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 USERPR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND7 root20 0 000 S 0.3 0.0 0:01.64 ksoftirqd/016 root20 0 000 S 0.3 0.0 0:01.97 ksoftirqd/12663 root20 0 923480 28292 13996 S 0.3 0.3 4:58.66 docker-containe3699 root20 0 000 I 0.3 0.0 0:00.13 kworker/u4:03708 root20 0 44572 4176 3512 R 0.3 0.1 0:00.07 top1 root20 0 225384 9136 6724 S 0.0 0.1 0:23.25 systemd2 root20 0 000 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:00TIMER: 1083906 2368646NET_TX: 539NET_RX: 1550643 1916776BLOCK:00IRQ_POLL:00TASKLET:333637 3930SCHED:963675 2293171HRTIMER:00RCU: 1542111 1590625

通过 /proc/softirqs 文件内容的变化情况,你可以发现, TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)等这几个软中断都在不停变化。

其中,NET_RX,也就是网络数据包接收软中断的变化速率最快。而其他几种类型的软中断,是保证 Linux 调度、时钟和临界区保护这些正常工作所必需的,所以它们有一定的变化倒是正常的。

内核选项命令参数等汇总

sar

系统活动报告工具

hping3

tcp/ip测试工具

tcpdump

抓包工具

top

curl

watch

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。