我目前在 RAM 和 SWAP 上遇到这种情况:

$ free -h
             total       used       free     shared    buffers     cached
Mem:          7,7G       7,5G       159M       100M        75M       5,9G
-/+ buffers/cache:       1,5G       6,1G
Swap:         7,9G       408M       7,5G

我想知道...

有没有办法知道哪些程序/数据是 RAM 缓存的和/或它们来自哪个进程?

我的想法是,由于它们是可重复使用的,因此应该有一种方法来“识别”它们。
但是我的知识真的太少了,不知道怎么做。

非常感谢您提前。

最佳答案



有一个程序 http://hoytech.com/vmtouch/ vmtouch 。它提供文件缓存中文件的百分比信息。您可能需要编译它。这是我电脑上的例子:

在读取不在缓存中的文件之前:

$ vmtouch -v  /usr/share/dict/linux.words
/usr/share/dict/linux.words
[                                                          ] 0/1210

           Files: 1
     Directories: 0
  Resident Pages: 0/1210  0/4M  0%
         Elapsed: 0.000169 seconds

从文件中读取一些数据后:
$ tail -n 10000 /usr/share/dict/linux.words >/dev/null
$ vmtouch -v  /usr/share/dict/linux.words
/usr/share/dict/linux.words
[                                                        oO] 24/1210

           Files: 1
     Directories: 0
  Resident Pages: 24/1210  96K/4M  1.98%
         Elapsed: 0.000152 seconds
vmtouch 首先为文件调用 nmap,然后使用 mincore 系统调用来确定文件或其某些页面是否驻留在内存中:
man mincore :

10-08 17:53