为什么我的cgroup在我的应用程序中显示内存泄漏?

时间:2019-11-08 10:10:02

标签: cgroups

我创建了一个新的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的目的。

0 个答案:

没有答案