nfs_inode_cache 异常高

nfs_inode_cache 异常高

我的服务器的 nfs_inode_cache = 11G 使用率很高,我试图弄清楚是什么消耗了这一切,我已经知道一些 java 应用程序会搜索和遍历具有大量条目和深层目录结构的目录。

有什么方法可以查看 dentry 缓存以了解所有这些内存是什么(正在缓存的路径是什么)?

这是我的 slabtop 命令:

   OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
8603424 8603424 100%    1.01K 2867808        3  11471232K nfs_inode_cache
3080826 3080737  99%    0.21K 171157       18    684628K dentry_cache
 24717  12515  50%    0.52K   3531        7     14124K radix_tree_node
 11365  11108  97%    0.74K   2273        5      9092K ext3_inode_cache

这是我的缓存压力:cat /proc/sys/vm/vfs_cache_pressure 100

答案1

您遇到任何问题了吗?您的 RAM 使用情况如何?(例如free -m

对于 Linux 来说,使用任何可用的 RAM 进行缓存是完全正常的 - 其中一些将通过 slabtop(dentry、inodes 等)显示,其余部分将通过free -m缓存内存(pagecache/swapcache)显示。

/proc/sys/vm/vfs_cache_pressure控制内核释放它们的比例。100 是默认的“公平”设置。减少此值有利于修剪页面缓存(即文件内容),而增加此值有利于修剪文件系统元数据(inode 等...)。无论如何,缓存修剪只会在内存压力下发生;如果您有大量未使用的内存,内核将保持其用于缓存。

可能更重要的设置是vm.swappiness- 该设置控制内核交换内存与回收缓存内存的行为。在大多数情况下,默认值都很好,但是如果您看到进程在密集 IO 期间挂起/交换,并且缓存的 RAM 比您需要的多得多,那么您很可能希望减少该值。此外,如果您有大量内存和相当旧的内核,您可能还需要调整这些参数之一(*bytes 或 *ratio,而不是两者!):

  • 脏_背景_字节
  • 脏背景比率
  • 脏字节
  • 脏值

所有这些设置均在此处完整记录:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

但是,如果您没有遇到任何问题,挂起进程,过度交换等,那么我建议不要更改默认设置。

相关内容