服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Linux系统下CPU性能问题分析案例(下)

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

2023-12-11 17:08未知服务器之家 Linux

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

Linux系统下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 提供了软中断的运行情况(下图中第一列是中断类型,后面案例分析会说到)

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

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

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

内核中断线程

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

案例现象

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

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

分析过程

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

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

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

分析结果

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

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

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

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

分析结果

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

3、使用tcpdump抓包一探究竟

tcpdump -i ens33 -n tcp port 80

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

分析结果

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

延伸 · 阅读

精彩推荐