LINUX.ORG.RU

/proc/1/statm и /sys/fs/cgroup паказывают разный объем использованной памяти

 , ,


0

2

Все происходит в докер контейнере. Если сделать запрос к докеру /containers/.../top\?ps_args='u', то будет 7 гигабайт для первого процеса и поменьше для всех остальных, а если сделать /containers/.../stats, то будет 1.32 гигабайта по всей системе. Открыл баш в работающем контейнере и вижу ту самую картину:

~ $ cat /sys/fs/cgroup/memory/memory.usage_in_bytes 
2192117760
~ $ cat /sys/fs/cgroup/memory/memory.stat | grep cache
cache 830414848
total_cache 830414848
~ $ cat /sys/fs/cgroup/memory/memory.kmem.usage_in_bytes 
55189504

Собственно, 2192117760+55189504-830414848=1416892416=1.32GiB - это cgroups показывает память по всей системе. Даже если не отнимать кэш, все равно выходит 2 гигабайта.

~ $ ps -opid,rss,vsz
PID   RSS  VSZ
    1 7.0g  39g
   29 361m 369m
   42 1128 1628
  144 1184 1628
  155    4 1548
~ $ cat /proc/1/statm
10245369 1836008 1604370 5767 0 238744 0

Но ps показывает 7.0g уже для первого процесса. /proc показывает тоже самое, 1836008 * 4096 = 7520288768 = 7.0GiB. Похоже что ps берет данные с /proc.

Для контейнеров с другим софтом такой проблемы нет, сумма вывода ps совпадает с данными cgroups.

Может причина в том, что виртуальной памяти 39g потрачено, но таблицы страниц занимают в 512 раз меньше, то есть 80 мегабайт и погоды не сделают.

Вопрос в том, что я пропустил? Что бы такого еще посчитать, чтобы сошлись объемы?

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.