Linux:什么应用程序正在使用我的内存caching

我想知道如果我可以看到哪个应用程序正在使用我的内存缓冲区和caching。 当数据从caching中删除时,在内核中还有任何指定的时间。 我的RAM正被缓冲区和caching充分使用,它也开始进行交换。

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 

不,它不吃掉。 它仅用作块caching。 它最caching,caching不能交换,但是这个规则也有一些例外。 例如,在快速SSD上caching硬盘可能是件好事。

但是,就你而言,情况要简单得多:Linux(和任何其他操作系统)使用全部 (或几乎全部)免费RAM来caching硬盘。 而且,不,这不是问题,因为如果需要新的内存页面,读caching页面总是可以自由的。 尽可能多地使用块caching,使平均文件操作速度更好。

实际上,如果你想知道你的系统真正的空闲内存,你应该计算“缓冲区”和“caching”,就好像它是免费的。

你可以在“免费”的标题上看到,实际上是(大部分是非常小的)内存大小,即使是高速caching也没有(不可能)被使用。 这不是问题,如果你的系统很慢,那不是因为这个。


交换使用的原因:看起来内核非常不用的一些内存块可以完全交换出来。 这些特别是不同的守护进程的记忆区域,它们只留在公羊里,什么也不做。 换出内存不是问题,因为它们没有用于任何事情,但是使用它们现在免费的内存页面来caching可以使你的系统更快


哪个进程使用caching? 实际上很难发现,实际上是不可能的。 块caching不被进程填充,它由磁盘读取操作填充。 如果磁盘块当前正在caching中(这意味着再次读取该块不需要等待您的硬盘),这意味着有人读取了这个块,但是没有注册,那个过程是这样的。 如果你想知道这个数据,你就需要在发生磁盘读取的时候观察磁盘的使用情况!

有一个工具,它的名字是blkmon 。 它是能够观看块设备的读取(和写入)操作,谷歌是你的朋友(或者我们正在等待你的下一个问题,在这里或在Unix上)。