簡體   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