我想知道我是否可以看到哪个应用程序正在使用我的ram缓冲区和缓存.当从缓存中删除数据时,内核中还有任何时间指定.我的Ram被缓冲区和缓存充分利用,它也开始吃交换.
free -m的输出:
$free -m total used free shared buffers cached Mem: 14034 13878 156 0 10 11362 -/+ buffers/cache: 2505 11528 Swap: 8187 478 7709
解决方法
不,它不吃掉掉.它仅用作块缓存.它大多数缓存,缓存不能进入交换,但是这个规则也存在一些例外.例如,在快速SSD上缓存慢速硬盘可能是一件好事.
但是,在您的情况下,情况要简单得多:Linux(以及任何其他操作系统)使用所有(或几乎所有)免费ram来缓存硬盘.并且,不,这不是问题,因为如果需要新的内存页面,则可以始终释放读取缓存页面.并尽可能多地使用块缓存,使平均文件操作速度更好.
实际上,如果你想知道系统的真正空闲内存,你应该计算“缓冲区”和“缓存”,就好像它是免费的一样.
您可以在“免费”标题上阅读的内容实际上是(通常非常极小的)内存大小,即使对于缓存也不会(甚至不能)使用.这不是问题,如果你的系统很慢,那不是因为这个原因.
交换使用的原因:某些内存块(内核看起来非常未使用)可以完全换出.这些特别是不同守护进程的内存区域,只留在ram中并且不做任何事情.换掉他们的内存不是问题,因为它们不用于任何东西,但使用他们现在免费的ram页面进行缓存可以使你的系统更快.
什么进程使用缓存?实际上很难找到,几乎不可能.块缓存未由进程填充,它由磁盘读取操作填充.如果磁盘块当前在缓存中(这意味着,再次读取此块不需要等待您的硬盘),这意味着有人读取了这个块,但它没有注册,这个过程就是这样.如果您想了解这些数据,您需要在磁盘读取使用情况发生时进行观察!
有一个工具,它的名字是blkmon.它能够观看块设备读取(和写入)操作,谷歌是你的朋友(或者我们正在等待你的下一个问题,在这里或在unix SE上).