CentOS 7.2 (3.10.0-327.18.2.el7.x86_64)
我在具有 32 GB RAM 的 Lenovo W540 iCore 7 上以具有 2 个 CPU 和 6 GB RAM 的 VMware 来宾身份运行。
我在虚拟机中看到 rcuos 和 rcuob 每个有 128 个进程。这听起来不太正确,因为这些进程应该等于系统中的核心数量。
我注意到我的虚拟机偶尔会冻结。
有没有办法限制 rcuos 和 rcuob 进程的数量等于 CPU 的数量。
我将 VM Guest 中的 CPU 数量减少到 1,但 rcuos 和 rcuob 的数量仍然各为 128。
然后,我添加了一个内核启动参数,将和maxcpus=0
的数量减少到 1 个,但随后我需要为虚拟机分配更多内核。如果我只使用一个核心,我的应用程序性能会降低 40%。rcuos
rcuob
答案1
我对 Linux 内核以及如何调整它的了解非常有限。在我发布并偶然发现另一个内核启动参数 nr_cpus 后,我继续谷歌搜索这里当我在虚拟机中将其设置为 2(CPU 数量)后,我现在只看到 2 个 rcuos 和 rcuoc 进程。
这对我有用。
编辑
/etc/默认/grub并添加
处理器数量=2在 GRUB_CMDLINE_LINUX 行中。然后就跑了
grub2-mkconfig -o /boot/grub2/grub.cfg重新启动后,现在 rcuos 和 rcuoc 每个进程不再是 128 个,我现在只看到每个进程 2 个。
$ ps 辅助| grep rcu 根 8 0.0 0.0 0 0 ? S 23:04 0:00 [rcu_bh] 根 9 0.0 0.0 0 0 ? S 23:04 0:00 [rcuob/0] 根 10 0.0 0.0 0 0 ? S 23:04 0:00 [rcuob/1] 根 11 0.0 0.0 0 0 ?晚上 23:04 0:00 [rcu_sched] 根 12 0.0 0.0 0 0 ? S 23:04 0:00 [rcuos/0] 根 13 0.0 0.0 0 0 ? S 23:04 0:00 [rcuos/1]
答案2
这种类型的内核线程太多是一个错误,已在https://access.redhat.com/solutions/1404313通过勘误表https://rhn.redhat.com/errata/RHSA-2016-2574.html并在或之后修复kernel-3.10.0-514
。 RedHat 于 2016 年 11 月发布了此内容,因此我确信它现在可以在 CentOS 中使用。
更新内核并重新启动。您应该看到正常的线程数rcous
。在我的例子中,正常值实际上是 0,低于 6 核虚拟机上的大约 95。
答案3
在vmware中解决此问题的另一种方法:
关闭虚拟机。
编辑设置 > 选项 > 高级 > 内存/CPU 热插拔
在“CPU 热插拔”中,禁用“此虚拟机的 CPU 热插拔”。
打开。
问题解决了。