我的服务器正在经历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
解决方法
您遇到任何问题吗?你的RAM使用情况如何? (例如free -m)
Linux使用任何可用于缓存的RAM是完全正常的 – 其中一些将通过slabtop(dentries,inode等)显示,其余部分通过free -m’缓存内存(pagecache / swapcache)显示.
/ proc / sys / vm / vfs_cache_pressure控制内核释放它们的比例.如果默认为“合理”设置,则为100.减少此值有利于修剪页面缓存(即文件内容),同时增加它有利于修剪文件系统元数据(inode等…).在任何情况下,缓存修剪只会在内存压力下发生;如果你有足够的未使用的内存,内核将把它用于缓存.
可能更重要的设置是vm.swappiness – 这个控制内核的行为来换掉内存与回收缓存内存.在大多数情况下,默认值都很好,但如果您看到在密集IO期间挂起/换出进程的方式比您需要的缓存更多,那么您很可能希望减少这个.此外,如果你有大量的内存和相当旧的内核,你可能还需要调整其中一个参数(*字节或*比率,而不是两者!):
> dirty_background_bytes
> dirty_background_ratio
> dirty_bytes
> dirty_ratio
所有这些设置都在此完整记录:https://www.kernel.org/doc/Documentation/sysctl/vm.txt
但是,如果您没有遇到任何问题,挂起进程,过度交换等等,那么我建议不要更改默认值.