内核内存在Docker容器中的ubuntu中创建文件的增长

时间:2018-12-18 04:00:53

标签: linux docker memory-leaks linux-kernel

在ubuntu容器(以及其他发行版)中创建文件会导致内核内存增加。除非删除文件,否则内存不会减少。 这是预期的行为吗?当创建文件的过程停止时,内存不会减少。

很容易复制。

  • 使用最新ubuntu映像中的卷创建docker实例
  • 使用以下命令登录实例并在该卷中创建文件:<PropertyGroup> <TargetFrameworks>net45;net46;net461;net462;net47;netcoreapp2.1</TargetFrameworks> </PropertyGroup>
  • 查看文件/sys/fs/cgroup/memory/memory.kmem.usage_in_bytes

kmem将会增长。 我需要了解为什么在程序执行相同操作的情况下避免或减轻这种行为:创建一组文件

1 个答案:

答案 0 :(得分:0)

我们发现问题出在牙科 inodes 缓存中。 可以使用sysctl设置参数vfs_cache_pressure。

文档在这里:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

vfs_cache_pressure

此百分比值控制内核回收的趋势 用于缓存目录和inode对象的内存。

在默认值vfs_cache_pressure = 100时,内核将尝试 关于页面缓存和回收索引和索引节点的“公平”速率 swapcache回收。降低vfs_cache_pressure使内核更喜欢 保留dentry和inode缓存。当vfs_cache_pressure = 0时,内核将 决不会由于内存压力而回收牙科和索引节点,这很容易 导致内存不足的情况。将vfs_cache_pressure增加到100以上 导致内核倾向于回收牙科和索引节点。

将vfs_cache_pressure显着增加到100以上可能会有负面影响 性能影响。回收代码需要采取各种锁才能找到可释放的 目录和inode对象。 vfs_cache_pressure = 1000时,它将寻找 可释放对象的数量是其十倍。