Linux:哪些应用程序正在使用我的 RAM 缓存

Linux:哪些应用程序正在使用我的 RAM 缓存

我想知道我是否可以看到哪个应用程序正在使用我的 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

答案1

不,它不会占用交换空间。它仅用作块缓存。在大多数缓存中,缓存不能进入交换空间,但此规则也存在一些例外。例如,在快速 SSD 上缓存慢速硬盘可能是一件好事。

但是,就您而言,情况要简单得多:Linux(以及任何其他操作系统)使用全部(或几乎所有)可用内存都用于缓存硬盘。而且,这不是问题,因为如果需要新的内存页,总是可以释放读取缓存页。并且尽可能多地使用块缓存,可以使平均文件操作速度更快。

事实上,如果你想知道真实的系统的可用内存,您应该计算“缓冲区”和“缓存”,就好像它们是空闲的一样。

您在“免费”标题上看到的实际上是(通常非常小的)内存大小,甚至不能(不能)用于缓存。这不是问题,如果您的系统很慢,那不是因为这个。


导致交换使用的原因:一些内存块,对于内核来说非常未使用的,可以完全交换出去。这些是不同守护进程的内存区域,它们只留在内存中,不做任何事情。交换出它们的内存不是问题,因为它们没有用于任何事情,但是使用现在空闲的 RAM 页面进行缓存可以使您的系统更快


哪个进程使用缓存?实际上很难找到,几乎不可能。块缓存不是由进程填充的,而是由磁盘读取操作填充的。如果磁盘块当前在缓存中(这意味着,再次读取此块不需要等待硬盘),则意味着某人读取了此块,但未注册,这是哪个进程。如果您想知道这些数据,则需要在读取时观察磁盘读取使用情况!

有一个工具可以实现这一点,它的名字是blkmon。它能够监视块设备的读取(和写入)操作,Google 是你的朋友(或者我们正在等待你的下一个问题,在这里或在 unix SE 上)。

相关内容