3

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

 9 months ago
source link: https://www.51cto.com/article/776106.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

作者:技术守护者 2023-12-11 07:21:36
硬中断是由硬件设备发送给CPU的一种中断信号。这可以是来自外部设备(如磁盘、网络接口卡、键盘)的信号,需要CPU的处理。软中断是由软件生成的中断信号,通常是由内核或操作系统的组件触发的,而不是外部硬件设备。
e7f8888920cba15c0178660870db1e2d18f3fa.png

在我的前一篇文章 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 提供了软中断的运行情况(下图中第一列是中断类型,后面案例分析会说到)
74655d1277362aa9b622084a9394daf9fe3275.png

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

f2b196d7254ebf6d42b211a2044a7a987e2c0a.png

内核中断线程

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

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

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

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

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

# 使用sar是因为不仅可以观察网络收发的吞吐量(BPS),还可以观察网络收发的网络帧数( PPS)
sar -n DEV 1
935e9c808b2232f73f21917d077982bea04458.png
  • 网卡ens33:每秒接收的网络帧数比较大,几乎达到8w,而发送的网络帧数较小,只有接近4w;每秒接收的千字节数只有 4611 KB,发送的千字节数更小,只有2314 KB(接收的PPS达到8w,但接收的BPS只有5k不到,网络帧看起来是比较小的)。
  • docker0veth04076e3:数据跟 ens33 基本一致只是发送和接收相反,发送的数据较大而接收的数据较小,这是 Linux 内部网桥转发导致的,属于正常情况。

3、使用tcpdump抓包一探究竟

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK