память ядра растет, создавая файлы в Ubuntu в контейнере Docker - PullRequest
0 голосов
/ 18 декабря 2018

Создание файлов в контейнере Ubuntu (также в других дистрибутивах) приводит к увеличению памяти ядра.Память не уменьшается за исключением случаев, когда файлы удаляются.Это ожидаемое поведение?Память не уменьшается при остановке процесса создания файлов.

Воспроизвести очень просто.

  • Создать экземпляр докера с томом из последнего образа Ubuntu
  • Войдите в систему и создайте файлы внутри этого тома с помощью этой команды: for i in {1..100000}; do dd if=/dev/urandom bs=4096 count=1 of=file$i; done
  • Посмотрите файл /sys/fs/cgroup/memory/memory.kmem.usage_in_bytes

Кмем будет расти.Мне нужно понять, почему, чтобы избежать или смягчить это поведение в случае программы, которая делает то же самое: создать набор файлов

1 Ответ

0 голосов
/ 21 декабря 2018

Мы обнаружили, что проблема заключается в кэше dentry и inode .Можно установить параметр vfs_cache_pressure с помощью sysctl.

Документация находится здесь: https://www.kernel.org/doc/Documentation/sysctl/vm.txt

vfs_cache_pressure

Это процентное значение контролирует тенденциюядра для восстановления памяти, которая используется для кэширования объектов каталогов и объектов inode.

При значении по умолчанию vfs_cache_pressure = 100 ядро ​​будет пытаться восстановить файлы dentries и inode с «честной» скоростью по отношению кPagecache и Swapcache восстановить.Уменьшение vfs_cache_pressure приводит к тому, что ядро ​​предпочитает сохранять кэш-память dentry и inode.Когда vfs_cache_pressure = 0, ядро ​​никогда не восстановит dentries и inode из-за нехватки памяти, и это может легко привести к нехватке памяти.Увеличение значения vfs_cache_pressure свыше 100 приводит к тому, что ядро ​​предпочитает восстанавливать зубные скобки и inode.

Значительное увеличение значения vfs_cache_pressure за пределы 100 может отрицательно сказаться на производительности.Для восстановления кода необходимо использовать различные блокировки, чтобы найти свободные каталоги и объекты inode.При vfs_cache_pressure = 1000 он будет искать в десять раз больше свободных объектов, чем есть.

...