Linux系统下CPU性能问题分析案例(下)

系统 Linux
硬中断是由硬件设备发送给CPU的一种中断信号。这可以是来自外部设备(如磁盘、网络接口卡、键盘)的信号,需要CPU的处理。软中断是由软件生成的中断信号,通常是由内核或操作系统的组件触发的,而不是外部硬件设备。

在我的前一篇文章 Linux系统下CPU性能问题分析案例(上)中介绍了CPU使用率的重要指标,包括User、System、Idle、IOwait、Irq、Softirq、Steal、Guest等CPU时间的说明,通过具体案例分析了User、Iowait等CPU使用率过高的排查思路,感兴趣的可以回去翻看,今天我们来对看下中断对CPU影响的案例和分析过程。

基本概念

我们常说的中断是什么?

硬中断:

  • 概念: 硬中断是由硬件设备发送给CPU的一种中断信号。这可以是来自外部设备(如磁盘、网络接口卡、键盘)的信号,需要CPU的处理。
  • 工作原理: 硬件设备需要CPU的处理时,它会发送一个硬中断信号,中断控制器接收到信号后将其传递给CPU。CPU会立即中断当前执行的任务,保存当前状态,然后执行与中断相关的中断处理程序。(硬件触发,快速执行)

软中断:

  • 概念: 软中断是由软件生成的中断信号,通常是由内核或操作系统的组件触发的,而不是外部硬件设备。
  • 工作原理: 软中断是通过在内存中设置一个特殊的中断标志位来触发的。当CPU执行到一个允许软中断的位置时,它会检查这个标志位,如果被设置,CPU将跳转到相应的软中断处理程序执行。(内核触发,延迟执行)

中断处理程序:

  • 概念: 中断处理程序是用于响应中断事件的一段代码,它负责处理中断并执行必要的操作。
  • 工作原理: 当中断被触发,CPU会跳转到相应的中断处理程序。中断处理程序执行与中断相关的任务,可能包括保存当前状态、处理中断源产生的事件、执行特定的操作,最后恢复先前的执行状态。

如何查看软中断和内核线程?

  • /proc/interrupts 提供了硬中断的运行情况(系统硬件触发,不需要太关注)
  • /proc/softirqs 提供了软中断的运行情况(下图中第一列是中断类型,后面案例分析会说到)

不同软中断类型在每个CPU上的累积运行次数

内核中断线程

软中断CPU使用率升高,我该怎么办?

案例现象

  • 软中断线程(ksoftirqd/1)使用率超高,处理中断的CPU占比也很高。

分析过程

1、使用watch动态观测,确认是什么类型的软中断?

watch -d "/bin/cat /proc/softirqs"

分析结果

  • TIMER(定时中断)、 NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)等这几个软中断都在不停变化。
  • 而 NET_RX,就是网络数据包接收软中断的变化速率最快。
  • 其他几种类型的软中断,是保证 Linux 调度、时钟、临界区保护这些正常工作所必需的,所以有变化时正常的。

2、使用sar查询网络收发情况

# 使用sar是因为不仅可以观察网络收发的吞吐量(BPS),还可以观察网络收发的网络帧数( PPS)
sar -n DEV 1

分析结果

  • 网卡ens33:每秒接收的网络帧数比较大,几乎达到8w,而发送的网络帧数较小,只有接近4w;每秒接收的千字节数只有 4611 KB,发送的千字节数更小,只有2314 KB(接收的PPS达到8w,但接收的BPS只有5k不到,网络帧看起来是比较小的)。
  • docker0veth04076e3:数据跟 ens33 基本一致只是发送和接收相反,发送的数据较大而接收的数据较小,这是 Linux 内部网桥转发导致的,属于正常情况。

3、使用tcpdump抓包一探究竟

tcpdump -i ens33 -n tcp port 80

分析结果

  • Flags [S]: 表示这是一个SYN包。而且是大量的SYN在发过来,很明显这就是SYN FLOOD攻击。
  • SYN FLOOD解决方法。
  • 如果有防护设备(F5等),通过硬件来防护。
  • 利用iptables临时封掉攻击的IP或IP号段,也可以根据访问频次来限制。
  • 优化系统内核相关参数,增加抵御能力。这个后期会在后期单独详细解决。
责任编辑:姜华 来源: 今日头条
相关推荐

2023-12-05 07:41:24

LinuxCPU性能问题

2011-04-02 10:29:20

Linux工具

2021-05-28 10:10:05

LinuxCPU机器学习

2020-05-21 14:28:00

Linux故障分析工具

2017-06-30 10:36:27

Linux系统分析工具

2017-07-04 13:02:02

Linux系统性能调优工具

2009-06-17 14:20:30

Java AWT界面乱

2020-04-22 09:33:41

数据护栏行为分析数据库安全

2014-07-28 16:47:41

linux性能

2010-12-24 13:25:44

Linux性能监控CPU

2022-07-15 08:52:03

Linux优化

2020-09-29 07:59:22

CPU系统性能

2011-05-27 10:35:05

PerfLinux系统性能

2017-08-25 15:56:54

Linuxproc文件系统CPU利用率

2023-12-13 09:08:26

CPU性能分析Linux

2009-04-21 13:54:20

2019-12-10 08:10:35

LinuxCPU性能优化

2010-12-22 13:09:23

Linux性能监测CPU

2010-06-04 09:42:47

Linux 测试cpu

2013-03-20 17:18:07

Linux系统性能调优
点赞
收藏

51CTO技术栈公众号