[Linux] Linux下谁在消耗我们的cache
一、缘由:
曾经看到MySQL服务器上Cache占用特别大,其实大家都知道这是合理的,这些都是可用内存;
那么问题来了,是谁在占用这些Cache呢?如果去掉不合理的Cache占用,系统内存会更充分的得到利用。
total used free shared buffers cached Mem: 64309 55889 8420 0 240 43363 -/+ buffers/cache: 12285 52024 Swap: 20479 0 20479
由上图可见,Cache占用了42G内存,猛地一看很可怕。实际上他还属于memfree之列。具体说明,可以看这里:
http://www.linuxatemyram.com/。
二、解决办法:
这里有两个工具可以查看某个文件是否占用了Page Cache,占用了多少:fincore和vmtouch
1、fincore
这是linux-ftools工具的一部分,你给出文件(夹)名作为输入,他会告诉你他有多少文件(数据)被系统缓存起来。
因为不太会安装,这里不做推荐,具体看这里https://code.google.com/p/linux-ftools/。
2、vmtouch
vmtouch可以查到缓存的文件和目录、把文件推入缓存和驱逐缓存中的文件等等。(推荐)
安装方法:
$ git clone https://github.com/hoytech/vmtouch $ cd vmtouch $ make $ sudo make install
使用方法:
$ vmtouch vmtouch: no files or directories specified vmtouch v1.0.2 - the Virtual Memory Toucher by Doug Hoyte Portable file system cache diagnostics and control Usage: vmtouch [OPTIONS] ... FILES OR DIRECTORIES ... Options: -t touch pages into memory -e evict pages from memory -l lock pages in physical memory with mlock(2) -L lock pages in physical memory with mlockall(2) -d daemon mode -m max file size to touch -p use the specified portion instead of the entire file -f follow symbolic links -h also count hardlinked copies -w wait until all pages are locked (only useful together with -d) -v verbose -q quiet
例子:
1)查看/tmp目录在内存中的缓存:
$ vmtouch /tmp/ vmtouch: WARNING: skipping non-regular file: /tmp/ssh-GgJnCEkWMQC2/agent.1068 Files: 17 Directories: 7 Resident Pages: 4780/4780 18M/18M 100% Elapsed: 0.001006 seconds
详细信息查看可使用-v参数 例如:vmtouch -v /tmp/
2)查看一个文件被缓存了多少:
$ vmtouch -v ~/Downloads/phoronix-test-suite_6.0.1_all.deb /home/neo/Downloads/phoronix-test-suite_6.0.1_all.deb [ ] 0/132 Files: 1 Directories: 0 Resident Pages: 0/132 0/528K 0% Elapsed: 0.000117 seconds
3)把文件缓存起来:
$ vmtouch -vt ~/Downloads/phoronix-test-suite_6.0.1_all.deb /home/neo/Downloads/phoronix-test-suite_6.0.1_all.deb [OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 132/132 Files: 1 Directories: 0 Touched Pages: 132 (528K) Elapsed: 0.007935 seconds
4)把缓存中的数据驱逐出去:
$ vmtouch -ve ~/Downloads/phoronix-test-suite_6.0.1_all.deb Evicting /home/neo/Downloads/phoronix-test-suite_6.0.1_all.deb Files: 1 Directories: 0 Evicted Pages: 132 (528K) Elapsed: 0.000109 seconds
附:
具体信息参考官网:https://hoytech.com/vmtouch/
另一个参考页面:vmtouch: portable file cache analyzer