nfs_inode_cache 异常高

use*_*838 5 linux memory redhat

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

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

这是我的平板命令:

   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
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*est 4

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

对于 Linux 来说,使用任何可用的 RAM 进行缓存是完全正常的——其中一些将通过平板显示(目录项、索引节点等),其余则通过free -m缓存内存(页面缓存/交换缓存)显示。

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

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

  • 脏背景字节
  • 脏背景比例
  • 脏字节
  • 脏率

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

但是,如果您没有遇到任何问题、挂起的进程、过多的换出等,那么我建议不要更改默认值。