了解缓存中的程序

时间:2014-05-14 18:26:10

标签: linux caching ubuntu ram

目前我有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缓存的和/或它们来自哪个进程?

我的想法是,由于它们可以重复使用,因此应该有一种“识别”它们的方法 但我的知识实在太小,无法知道如何。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

  

有没有办法知道哪些程序/数据是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 frist为文件调用nmap,然后使用mincore系统调用来确定文件或其某些页面是否驻留在内存中:

man mincore

  

描述

     

mincore()返回一个向量,指示是否有页面   调用进程的虚拟内存驻留在核心(RAM)中,并且   因此,如果引用,将不会导致磁盘访问(页面错误)。该   kernel返回有关从的页面开始的驻留信息   地址addr,并继续长度字节。