查找 CPU 使用率 100% 的根源

查找 CPU 使用率 100% 的根源

最近我的 Dell Poweredge 2850 崩溃了,我将其追溯到 RAID 内存卡损坏。我更换了内存卡并重置了电池,然后服务器再次启动。

启动后,我注意到其中一个 CPU 总是达到 100%。通常是 CPU 1(第 2 个 CPU),但在大约 10 次启动中,有一次是 CPU 3(第 4 个 CPU)。

导致高负载的进程是 events/1(或 events/3,它发生在核心 3 上)。我查看了 dmesg,没有发现任何异常。有人能建议我如何才能找到导致 CPU 使用率过高的实际原因吗?

我还注意到,当我在启动时插入显示器时,CentOS 加载屏幕上的加载栏到达大约一半时屏幕变黑(不显示登录屏幕)。否则一切都会正常启动和运行。

服务器信息:

CentOS release 6.9 (Final)

CPU 信息:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 15
model       : 4
model name  : Intel(R) Xeon(TM) CPU 3.00GHz
stepping    : 3
microcode   : 5
cpu MHz     : 3000.000
cache size  : 2048 KB
physical id : 3
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 6
initial apicid  : 6
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc pebs bts pni dtes64 monitor ds_cpl cid cx16 xtpr
bogomips    : 5985.27
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:

如果您想查看任何特定的配置文件或输出,请添加评论。

更新 1:

猫/ proc /中断

            CPU0       CPU1       CPU2       CPU3       
   0:        133          0          0          1   IO-APIC-edge      timer
   1:          0          0          0          2   IO-APIC-edge      i8042
   4:          0          0          0          2   IO-APIC-edge    
   8:          0          0          0          1   IO-APIC-edge      rtc0
   9:          0          0          0          0   IO-APIC-fasteoi   acpi
  12:          0          0          0          4   IO-APIC-edge      i8042
  14:          0          0          0        147   IO-APIC-edge      ata_piix
  15:          0          0          0          0   IO-APIC-edge      ata_piix
  16:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
  18:          0          0          0        301   IO-APIC-fasteoi   uhci_hcd:usb4, radeon
  19:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
  23:          0          0          0         49   IO-APIC-fasteoi   ehci_hcd:usb1
  46:          0          0       3804       4767   IO-APIC-fasteoi   megaraid
  64:          0        288          0        104   IO-APIC-fasteoi   eth0
 NMI:          0          1          0          0   Non-maskable interrupts
 LOC:      24325      76909      25269      31039   Local timer interrupts
 SPU:          0          0          0          0   Spurious interrupts
 PMI:          0          1          0          0   Performance monitoring interrupts
 IWI:          0          0          0          0   IRQ work interrupts
 RES:       2295        703       1357        886   Rescheduling interrupts
 CAL:       3986        421        156        175   Function call interrupts
 TLB:        526         95        803       3519   TLB shootdowns
 TRM:          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0   Threshold APIC interrupts
 MCE:          0          0          0          0   Machine check exceptions
 MCP:          1          1          1          1   Machine check polls
 ERR:          0
 MIS:          0

特区

Linux 2.6.32-696.16.1.el6.x86_64 (HOSTNAME)     12/30/2017  _x86_64_    (4 CPU)

09:57:37 AM       LINUX RESTART

10:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:10:01 AM     all      0.10      0.07     21.09      1.49      0.00     77.25
10:20:01 AM     all      0.15      0.00     21.00      0.00      0.00     78.85
10:30:01 AM     all      0.11      0.00     20.92      0.00      0.00     78.97
10:40:01 AM     all      0.09      0.00     20.81      0.01      0.00     79.09
Average:        all      0.11      0.02     20.96      0.37      0.00     78.54

12:35:32 PM       LINUX RESTART

顶部

Tasks: 164 total,   2 running, 162 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us, 20.8%sy,  0.0%ni, 78.9%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8058904k total,   453272k used,  7605632k free,    22240k buffers
Swap:  8191996k total,        0k used,  8191996k free,   174064k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                               
   20 root      20   0     0    0    0 R 99.9  0.0   5:50.67 events/1                                                                                                                                              

更新2:

重新获得对盒子的物理访问权后,我完全用来自零件服务器的 PERC 控制器替换了它。我重新安装了内存卡和电池。由于新硬件导致 RAID 配置不匹配,我从磁盘恢复了它。启动后,我的 CPU 使用率仍然为 100%。

我拔掉 CMOS 电池并按住电源按钮 10 秒钟,重置了 BIOS/CMOS。重新启动并设置 RAID 以再次从硬盘读取数据。CPU 仍为 100%。

我运行yum update并重启。仍然是 100%。下面是显示各个 CPU 的顶部。

顶部

top - 11:59:19 up 21 min,  1 user,  load average: 1.00, 0.97, 0.72
Tasks: 164 total,   2 running, 162 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,100.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8058904k total,   456996k used,  7601908k free,    22480k buffers
Swap:  8191996k total,        0k used,  8191996k free,   173792k cached

特区

Linux 2.6.32-696.16.1.el6.x86_64 (HOSTNAME)     01/04/2018  _x86_64_    (4 CPU)

10:40:45 AM       LINUX RESTART

10:50:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:00:01 AM     all      0.08      0.00     20.86      0.00      0.00     79.06
11:40:01 AM     all      0.00      0.00      0.00      0.00      0.00      0.00
11:50:01 AM     all      0.08      0.00     20.87      0.02      0.00     79.03
12:00:01 PM     all      0.08      0.00     20.89      0.00      0.00     79.02
Average:        all      0.00      0.00     20.83      0.00      0.00     79.78

猫/ proc /中断

            CPU0       CPU1       CPU2       CPU3       
   0:        133          0          0          6   IO-APIC-edge      timer
   1:          0          0          0          2   IO-APIC-edge      i8042
   4:          0          0          0          2   IO-APIC-edge    
   8:          0          0          0          1   IO-APIC-edge      rtc0
   9:          0          0          0          0   IO-APIC-fasteoi   acpi
  12:          0          0          0          4   IO-APIC-edge      i8042
  14:          0          0          0        147   IO-APIC-edge      ata_piix
  15:          0          0          0          0   IO-APIC-edge      ata_piix
  16:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
  18:          0          0        302        302   IO-APIC-fasteoi   uhci_hcd:usb4, radeon
  19:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
  23:          0          0          0         53   IO-APIC-fasteoi   ehci_hcd:usb1
  46:          0          0       4074       4912   IO-APIC-fasteoi   megaraid
  64:          0       4917          0        108   IO-APIC-fasteoi   eth0
 NMI:          0          0          0         28   Non-maskable interrupts
 LOC:     197497     401002     148354    1361329   Local timer interrupts
 SPU:          0          0          0          0   Spurious interrupts
 PMI:          0          0          0         28   Performance monitoring interrupts
 IWI:          0          0          0          0   IRQ work interrupts
 RES:       5891       1183       2828       8249   Rescheduling interrupts
 CAL:       3641       1441        156        184   Function call interrupts
 TLB:        837       3324        833        202   TLB shootdowns
 TRM:          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0   Threshold APIC interrupts
 MCE:          0          0          0          0   Machine check exceptions
 MCP:          6          6          6          6   Machine check polls
 ERR:          0
 MIS:          0

更新 3:

我在 GRUB 中的内核命令中添加了 noapic 和 nolapic 参数。以下是 top 和 cat /proc/interrupts 的结果

顶部

top - 14:55:01 up 5 min,  1 user,  load average: 1.76, 1.27, 0.58
Tasks: 111 total,   2 running, 109 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.4%us, 99.6%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8059152k total,   442016k used,  7617136k free,    22252k buffers
Swap:  8191996k total,        0k used,  8191996k free,   173556k cached

猫/ proc /中断

          CPU0       
  0:     447518    XT-PIC-XT-PIC    timer
  1:          2    XT-PIC-XT-PIC    i8042
  2:          0    XT-PIC-XT-PIC    cascade
  3:          1    XT-PIC-XT-PIC  
  4:          4    XT-PIC-XT-PIC  
  5:         50    XT-PIC-XT-PIC    ehci_hcd:usb1
  7:       8825    XT-PIC-XT-PIC    uhci_hcd:usb4, radeon, megaraid
  8:          1    XT-PIC-XT-PIC    rtc0
  9:          0    XT-PIC-XT-PIC    acpi
 10:          0    XT-PIC-XT-PIC    uhci_hcd:usb3
 11:       1586    XT-PIC-XT-PIC    uhci_hcd:usb2, eth0
 12:          4    XT-PIC-XT-PIC    i8042
 14:        148    XT-PIC-XT-PIC    ata_piix
 15:          0    XT-PIC-XT-PIC    ata_piix
NMI:          0   Non-maskable interrupts
LOC:          0   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
IWI:          0   IRQ work interrupts
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:          2   Machine check polls
ERR:          0
MIS:          0

我还尝试启动另一个更旧版本的内核(Centos 6.7),结果与以前相同:随机核心的 CPU 使用率为 100%。

更新 4:

我被另一个项目分散了注意力,让服务器运行了几个小时。在关闭之前,我检查了 top,发现 CPU 使用率已降至正常水平(每核不到 1%)。我重新启动以查看问题是否会再次出现,但并没有。我想知道是什么原因造成的,如果有人有任何建议,我愿意继续尝试不同的方法来找出原因。我注意到的唯一异常是 /var/spool/mail/root 中的一条消息:

Invalid system activity file: /var/log/sa//sa04

这是在我检查顶部之前生成的。

更新 5:

我找到了问题的根源!当我休息去处理其他项目时,我拔掉了显示器的电源并随身携带。当我再次检查(通过 SSH)时,CPU 使用率正常。当我回想可能发生了什么变化时,我唯一能想到的就是显示器。为了验证这个理论,我在插入显示器的情况下重新启动。瞧!100% CPU 使用率。我拔掉显示器的电源,CPU 使用率立即下降。

所以现在我想知道插入显示器时是什么原因导致 CPU 占用率升高?

更新 6:

串行通信

00:00.0 Host bridge: Intel Corporation E7520 Memory Controller Hub (rev 09)
00:02.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A (rev 09)
00:04.0 PCI bridge: Intel Corporation E7525/E7520 PCI Express Port B (rev 09)
00:05.0 PCI bridge: Intel Corporation E7520 PCI Express Port B1 (rev 09)
00:06.0 PCI bridge: Intel Corporation E7520 PCI Express Port C (rev 09)
00:1d.0 USB controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 (rev 02)
00:1d.1 USB controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 (rev 02)
00:1d.2 USB controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 (rev 02)
00:1d.7 USB controller: Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c2)
00:1f.0 ISA bridge: Intel Corporation 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801EB/ER (ICH5/ICH5R) IDE Controller (rev 02)
01:00.0 PCI bridge: Intel Corporation 80332 [Dobson] I/O processor (A-Segment Bridge) (rev 06)
01:00.2 PCI bridge: Intel Corporation 80332 [Dobson] I/O processor (B-Segment Bridge) (rev 06)
02:0e.0 RAID bus controller: Dell PowerEdge Expandable RAID controller 4 (rev 06)
05:00.0 PCI bridge: Intel Corporation 6700PXH PCI Express-to-PCI Bridge A (rev 09)
05:00.2 PCI bridge: Intel Corporation 6700PXH PCI Express-to-PCI Bridge B (rev 09)
06:07.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05)
07:08.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05)
09:0d.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV100 [Radeon 7000 / Radeon VE]

更新7:

将 noacpi 和 nomodeset 添加到启动选项后,CPU 使用率问题就消失了。CentOS 还启动到登录屏幕,而不是在加载屏幕中间使显示器变黑。这说明了什么?

答案1

似乎是由megaraid驱动程序 (中断 46) 引起的 IRQ 风暴。这可能是由不正确的 BIOS/驱动程序设置或硬件故障引起的。

您可以尝试:

  • 更新您的 Dell PERC 驱动程序和固件
  • 使用不同的(较旧/较新)内核版本
  • 重置服务器 CMOS/BIOS 和/或更新其固件
  • 更换受影响的硬件。

相关内容