繁体   English   中英

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

[英]kernel memory grows creating files in ubuntu in a docker container

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

复制非常容易。

  • 使用最新的ubuntu映像创建具有卷的Docker实例
  • 使用以下命令登录实例并在该卷中创建文件: for i in {1..100000}; do dd if=/dev/urandom bs=4096 count=1 of=file$i; done 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

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

我们发现问题出在dentryinode缓存中。 可以使用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的情况下,它将查找的可释放对象是其可用对象的十倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM