我创建了一个新的cgroup,名为mycgroup
,仅附加到内存子系统。最初,此新创建的cgroup不报告内存使用情况,如对cat /var/cgroups/mycgroup/memory.usage_in_bytes
的调用所显示,该打印为0。
但是,当我多次通过cgexec运行以下命令时,内存使用量开始累积,即使该过程是一个简单的echo
调用,也没有停止或派生其他任何操作。
username@232:~/cache/build$ sudo cgdelete memory:mycgroup && sudo cgcreate -g "memory:mycgroup" -t username:username
username@232:~/cache/build$ sudo cgegex -g memory:mycgroup echo "HELLO"
sudo: cgegex: command not found
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
username@232:~/cache/build$ sudo cgexec -g memory:mycgroup echo "HELLO"
HELLO
我正在做的是多次调用echo,并且echo运行成功。但是,在所有这些调用之后,/var/cgroups/mycgroup/memory.limit_in_bytes
报告的内存每次开始增加约70KB。经过几次通话后,systemd-cgtop
向我显示了以下内容:
Control Group Tasks %CPU Memory Input/s Output/s
/ 1533 92.5 26.9G - -
/mycgroup - - 892.0K - -
/system.slice 96 - - - -
/system.slice/ModemManager.service 3 - - - -
/system.slice/NetworkManager.service 4 - - - -
/system.slice/accounts-daemon.service 3 - - - -
/system.slice/acpid.service 1 - - - -
/system.slice/atop.service 1 - - - -
为清楚起见,我仅显示了cgtop的前几行。请注意mycgroup的892K内存使用情况,它没有与之关联的正在运行的任务/进程。实际上,/var/cgroups/mycgroup/cgroup.procs
是空的。
那么这个内存怎么了?如果没有与cgroup相关联的进程,为什么会有该进程?
更有问题的是,因此,我无法在/var/cgroups/mycgroup/memory.limit_in_bytes
中回显比/var/cgroups/mycgroup/memory.usage_in_bytes
中更低的值,这阻止了我对cgroup进行内存控制,从而破坏了cgroup的目的。>