Linux:空闲 CPU 上的极端负载

Linux:空闲 CPU 上的极端负载

我正在调查极端负载下的奇怪情况(但 CPU、IOWAIT、SYS、磁盘/网络活动较低)在我们的一台运行着许多 Oracle 数据库实例的 Linux 服务器上。

当机器上有一些 CPU 负载时​​,一切看起来都很正常,正如我们在 vmstat 中看到的那样:

 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 2  0 193312 1959440 403368 38270032    0    0  2504    25 4660 3916 16  5 78  1  0
 1  0 193312 1899352 403560 38277932    0    0  2198  1720 5175 4675 14  5 79  2  0
 1  3 193312 1878992 403584 38279024    0    0 13900 14261 2054 2704  6  1 93  1  0


一旦机器空转,它表现出一种奇怪的行为:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
102  0 173164 1909664 408596 38271676    0    0  1124  1094 2312 2345  4  3 91  3  0
15  5 173164 1909968 408620 38271904    0    0   256   677  472  843  2  0 98  0  0
94  0 173164 1858988 408664 38311548    0    0   292   161 1786 1600  5  2 92  1  0
51  0 173164 1859832 408664 38311856    0    0   849   957 1044 1436  2  1 95  2  0
200 12 173164 1859708 408680 38311840    0    0    96   536  559  636  1  0 99  0  0
60  0 173164 1844480 408704 38328308    0    0   288   653  632  830  1  1 98  0  0
124  0 173164 1845340 408712 38329748    0    0   144   947 1746 1926  3  2 95  1  0
48  1 173164 1850432 408752 38329792    0    0   268   844 1783 1862  2  3 94  1  0
509  0 173164 1882880 408752 38329832    0    0    60    12 1893 1726  2  2 95  1  0
125  0 173164 1884208 408768 38329868    0    0   160   816 1918 2426  4  1 95  0  0


正如你在第一列看到的,我们有一个高运行队列长度sar -q 1证实了:

04:18:29 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
04:18:30 PM         3      1288     15.13      9.40     11.92
04:18:31 PM         1      1298     15.13      9.40     11.92
04:18:32 PM        34      1298     15.13      9.40     11.92
04:18:34 PM         3      1298     15.28      9.52     11.95
04:18:35 PM        64      1302     15.28      9.52     11.95
04:18:36 PM         5      1302     15.28      9.52     11.95
04:18:37 PM         0      1302     15.28      9.52     11.95
04:18:38 PM        62      1302     15.28      9.52     11.95
04:18:39 PM        13      1302     17.26     10.03     12.10
04:18:40 PM         3      1303     17.26     10.03     12.10
04:18:41 PM        90      1302     17.26     10.03     12.10
04:18:42 PM         7      1302     17.26     10.03     12.10
04:18:43 PM        17      1302     16.12      9.91     12.05
04:18:44 PM       400      1302     16.12      9.91     12.05

因此,平均负载看起来也非常可怕(使用uptime):

16:21:43 up 16 days,  2:16,  2 users,  load average: 78.91, 28.88, 18.29

一旦出现一些 CPU 负载,一切似乎都恢复正常:

15:18:27 up 16 days,  1:13,  1 user,  load average: 0.95, 1.37, 1.81

ps r -A没有显示任何有趣的内容(我怀疑许多进程处于RD处于状态 - 但事实并非如此):

  PID TTY      STAT   TIME COMMAND
28947 pts/0    R+     0:00 ps r -A

我可以排除许多短暂过程导致的原因。

问题:

  • 什么原因会导致这样的行为?
  • 如何进一步深入探讨这个问题?

答案1

这更像是一个 FYI(因为我还不能评论):运行队列计算线程,而不是进程。要查找可运行且不可中断的休眠线程,ps您可以使用:

ps -eLo stat,pid,user,command | egrep "^STAT|^D|^R" 

答案2

最新内核版本(2.6.32 之后)存在一个 Bug,由于平均负载计算方法的改变,导致系统空闲时的平均负载大幅增加。

更多信息可以查看 Red Hat 官方邮政

还有一起未结案件错误日志

相关内容