目前我有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缓存的和/或它们来自哪个进程?
我的想法是,由于它们可以重复使用,因此应该有一种“识别”它们的方法 但我的知识实在太小,无法知道如何。
非常感谢你。
答案 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,并继续长度字节。