kswapd进程导致系统CPU过高

kswapd进程导致系统CPU过高

我正在排除RHEL 5服务器的一些问题。这台Oracle DB服务器已经运行了一段时间,没有出现太多问题。最近我注意到,由于 KSWAPD 进程导致 CPU 使用率过高,服务器负载相对较高。检查后,我发现服务器有大量交换活动。

服务器规格如下:

12 x 2 CPU & 64GB RAM
bash-3.2$ uname -a
Linux 2.6.18-408.el5 #1 SMP Fri Dec 11 14:03:08 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

当我查看 top 时,我可以看到服务器仍然有 10GB 的可用物理内存,因此我不确定它为什么要交换。如果有人能指出正确的故障排除方向,我将不胜感激。

top - 15:31:35 up 231 days,  5:22,  2 users,  load average: 13.27, 13.97, 14.12
Tasks: 1443 total,  12 running, 1431 sleeping,   0 stopped,   0 zombie
Cpu(s): 29.2%us, 17.2%sy,  0.0%ni, 47.5%id,  5.4%wa,  0.0%hi,  0.6%si,  0.0%st
Mem:  65839252k total, 53587688k used, 12251564k free,   122936k buffers
Swap: 68059128k total,  4535508k used, 63523620k free, 45719164k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9423 oraitxnp  17   0 8403m 167m 166m R 98.7  0.3   0:57.51 oracle
12348 oraitxnp  17   0 8405m 242m 240m R 98.7  0.4   0:39.11 oracle
 8942 oraitxnp  20   0 8404m 174m 171m R 95.6  0.3   1:59.77 oracle
 9049 oraitxnp  25   0 8404m 170m 167m R 95.6  0.3   1:33.17 oracle
 9402 oraitxnp  25   0 8404m 161m 158m R 95.6  0.3   1:24.03 oracle
13280 oraitxnp  17   0 8403m 161m 159m R 95.6  0.3   1:04.59 oracle
13227 oraitxnp  17   0 8403m 165m 162m R 92.4  0.3   0:40.65 oracle
 1431 root      11  -5     0    0    0 R 82.8  0.0   2802:41 kswapd2
11395 oraitxnp  16   0 8403m 192m 191m R 66.9  0.3   0:15.55 oracle

sar -r 
02:20:02 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
02:30:11 PM  12860252  52979000     80.47    122888  45721248  63711928   4347200      6.39    853652
02:40:02 PM  12591216  53248036     80.88    122876  45728156  63467408   4591720      6.75    860892
02:50:01 PM  12648836  53190416     80.79    122928  45729408  63717800   4341328      6.38    913284
03:00:02 PM  12489840  53349412     81.03    122932  45727364  63558884   4500244      6.61    941220
03:10:05 PM  12380352  53458900     81.20    123064  45735548  63541648   4517480      6.64    879124
03:20:12 PM  12195596  53643656     81.48    123124  45732364  63358440   4700688      6.91    901656
03:30:02 PM  12425600  53413652     81.13    122936  45718624  63582308   4476820      6.58    964544
Average:     12406342  53432910     81.16    121691  45498460  63646323   4412805      6.48    952204

sar -B
02:20:02 PM  pgpgin/s pgpgout/s   fault/s  majflt/s
02:30:11 PM  36386.86   4421.45  14369.55   2242.21
02:40:02 PM  41398.13   5570.15  17610.94   2555.90
02:50:01 PM  51600.70   4681.47  14093.22   1675.94
03:00:02 PM  48850.39   5340.96  15636.23   2251.99
03:10:05 PM  53043.46   4755.90  17506.83   2378.80
03:20:12 PM  39151.42   5297.79  14383.58   1816.64
03:30:02 PM  47760.58   5099.56  14774.31   2236.45
Average:     47687.94   4831.93  15128.85   2191.29

-bash-3.2$ free -m
             total       used       free     shared    buffers     cached
Mem:         64296      52281      12014          0        120      44655
-/+ buffers/cache:       7506      56789
Swap:        66463       4545      61918

答案1

您的设置是多少vm.swappiness?默认值为 60(无论如何在 Ubuntu 上)。据我了解,数字越低,您的系统就越倾向于使用 RAM 而不是交换。

当然,这是假设高 CPU 负载是由于磁盘交换造成的。如果我正确读取了该输出,则这 8 个oraitxnp进程每个进程消耗 8G 以上的虚拟 (RAM)。这似乎是物理 RAM 争用,但不确定 RES 和 SHR 列是如何发挥作用的。

我想cat /proc/meminfo更好地了解正在使用多少“物理”RAM。sar由于它将 64G 物理 + 66G 交换混合在一起,因此很难从某些输出中看出这一点,但我大胆猜测,在该框中添加另外 64G RAM —— 并将该磁盘交换减少到 8G 左右。理想情况下,您永远不想遇到磁盘交换。如果遇到,您需要添加更多物理 RAM 或导致性能损失。

几年前,Linux 的交换标准是“使内存翻倍”,但当时大多数桌面系统只运行 1-2G。即使红帽已经改变了这种说法,认为 20% 的体力活动“通常是个好主意”

相关内容