我一直在 Linux 上运行具有以下内核的演示系统:
2.6.32-400.1.1.el5uek #1 SMP 2012 年 6 月 25 日星期一 20:25:08 EDT x86_64 x86_64 x86_64 GNU/Linux
一旦发生交换,系统的 CPU 使用率就会上升到几乎 100% 繁忙,其中约 90% 是系统 CPU 使用率。有人告诉我这是预料之中的,因为 Linux 页面守护进程仅在内存不足(或可用内存小于 0.5G)时才会启动并开始将内存块写入交换,这会导致大量的系统 CPU 使用率。系统上的“swappiness”为 60。
在 Linux 上发生交换时 CPU 使用率达到 100% 是预期行为吗?
我之所以有上述问题,是因为当我将演示迁移到具有以下 Linux 内核的另一个系统时,上述行为发生了变化:
2.6.39-400.128.14.el5uek #1 SMP 2014 年 5 月 10 日星期六 00:06:52 PDT x86_64 x86_64 x86_64 GNU/Linux
我注意到的迁移系统上的 vm 参数的唯一区别是 min_free_kbytes 参数,在迁移系统上更改为 524288,而在迁移前的系统中则为 51200。
在迁移后的系统上,当可用内存达到 1.5G 以下时,就会发生交换,然后 CPU 使用率会稍微上升,大约从 30% 上升到 40%,并且应用程序性能只会在短时间内变得不稳定,然后一切都会恢复正常,就像交换发生之前一样。
是什么让迁移后的系统行为如此不同,以至于交换时 CPU 使用率不会上升到 100% 繁忙?
这是一个非常重要的演示系统,对上述两个问题的解释将非常有用。任何想法都将不胜感激。