Почему моя cgroup показывает утечку памяти в моем приложении? - PullRequest
0 голосов
/ 08 ноября 2019

Я создал новую группу с именем 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

Все, что я делаю, - это вызываю эхо несколько раз, и эхо выполняется успешно. Однако после всех этих вызовов память, сообщаемая /var/cgroups/mycgroup/memory.limit_in_bytes, начинает увеличиваться примерно на 70 КБ каждый раз. 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. Обратите внимание на использование памяти 892K mycgroup, с которой не связано ни одно из запущенных заданий / процессов. Действительно, /var/cgroups/mycgroup/cgroup.procs пусто.

Так что же с этой памятью? Если нет никакого процесса, связанного с cgroup, почему это там? Что еще более проблематично, из-за этого я не могу отобразить значения в /var/cgroups/mycgroup/memory.limit_in_bytes, которые ниже, чем значения в /var/cgroups/mycgroup/memory.usage_in_bytes, что не позволяет мне осуществлять контроль над памятью над моей cgroup, нанося ущерб цели cgroup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...