为什么即使 cgroup 中没有运行任何进程,它仍会报告内存使用情况?

为什么即使 cgroup 中没有运行任何进程,它仍会报告内存使用情况?

运行时systemd-cgtop,我得到以下结果(仅显示前几行):

Control Group                                                                                                          Tasks   %CPU   Memory  Input/s Output/s
/                                                                                                                       1752   92.2    29.0G        -        -
/mycgroup                                                                                                                -      -     3.3M        -        -
/system.slice                                                                                                             98      -        -        -        -
/system.slice/ModemManager.service                                                                                         3      -        -        -        -
/system.slice/NetworkManager.service                                                                                       4      -        -        -        -
/system.slice/accounts-daemon.service                                                                                      3      -        -        -        -
/system.slice/acpid.service     

请注意,我的 cgroup(位于第二行)占用了大约 3.3M 内存。事实上,当我运行

cat /var/cgroups/mycgroup/memory.usage_in_bytes 
3530752

我不确定这些内存使用量来自哪里。我该如何检测谁在使用这部分内存,以及我该怎么做才能强制停止此 cgroup 中所有进程的内存使用量,而无需删除该 cgroup?

我拥有的其他 cgroup 不消耗该内存。

答案1

我认为这表示有未回收的缓存内存。最有可能的是,您确实曾经在 cgroup 中运行过一个任务,但后来停止了它。缓存内存可能仍然存在。

如果 cgroup 中没有正在运行的任务,您可以强制清空:

echo 0 >/sys/fs/cgroup/memory/mycgroup/memory.force_empty

相关内容