我的服务器正在经历nfs_inode_cache = 11G的高使用率,即时通讯试图找出什么是消耗所有这一切,我知道,具有大量的条目和深层目录结构的目录是由一些Java应用程序search和遍历。
是否有任何方法来查看dentrycaching,以查看所有这些内存是什么(被caching的path是什么)?
这是我的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
这是我的caching压力:cat / proc / sys / vm / vfs_cache_pressure 100
你遇到任何问题吗? 你的内存使用情况如何? (例如free -m )
Linux使用任何内存可用于caching是非常正常的,其中一些将通过slabtop(dentries,inode等)显示,其余部分则通过free -mcaching的内存(pagecache / swapcache)显示。
/proc/sys/vm/vfs_cache_pressure控制内核释放它们的比例。 100如果默认“公平”设置。 减less此值有利于修剪页面caching(即文件内容),同时增加修剪文件系统元数据(inode等)。 无论如何,caching修剪只会在内存压力下发生; 如果你有很多未使用的内存,内核将保持它用于caching。
vm.swappiness可能是一个更重要的设置,这个控制内核的行为来交换内存和回收caching内存。 在大多数情况下,默认值是好的,但是如果你看到进程在IO密集期间被挂起/交换出来的方式比你需要的更多的cachingram,那么你很可能想减less这个。 另外,如果你有大量的内存和一个相当老的内核,你可能还需要调整其中的一个参数(*字节或*比率,而不是两个!):
所有这些设置都完整logging在这里: https : //www.kernel.org/doc/Documentation/sysctl/vm.txt
但是,如果你没有遇到任何问题,挂起的进程,过度的交换等,那么我build议不要改变默认值。