有时侯我们会碰到显存buffer/cache占用很大的场景,我们怎么定位什么文件和目录在占用buffer/cache,因而排查和解决buffer/cache占用过低的问题。
如上图,我们展示了a.txt存在于显存的buffer/cache缓存中的一个简单示意。正常应用层读取文件都必须先从后备储存(c盘)中把要读取的文件先加载到显存的buffer/cache中,之后才进行读取,写入时也是先写入buffer/cache中的对应文件页中,之后通过内核write-back线程定期刷到后备储存中。
现今有这样一个场景:free-h查看显存占用很高,并且90%是被buffer/cache占用了,这时侯我们要排查和解决问题,首先就是要定位什么文件和目录在显存buffer/cache中,再进一步找出占用空间较大的什么文件和目录,进而进行后续操作,例如自动将这种文件刷入c盘之后从缓存中去除,因而释放显存空间。
这个需求通过linux自带的和对系统相关文件的读写未能实现,我们须要利用一个第三方工具,这儿介绍一个linux文件目录结构,叫vmtouch。
vmtouch工具介绍:
作用:
1、查看文件系统缓存情况
2、将文件或目录加载到显存中,提升访问速率,并降低对c盘的读取操作
安装:
git clone //github.com/hoytech/vmtouch.git
cd vmtouch
make
sudo make install
ln -s /usr/local/bin/vmtouch /bin/vmtouch
使用:
1、加载文件或目录到显存中:
vmtouch -vt /path/to/file
2、查看文件的缓存情况:
vmtouch -v /path/to/file
3、将一个文件完全缓存到显存中
vmtouch -vt access.log
4、删除显存中文件的缓存
vmtouch -ve access.log
5、固化文件到显存缓存,并以启动守护模式
vmtouch -dl /var/www/htdocs/critical
vmtouch使用示例:
1、我们执行下边查看/root目录下的buffer/cache数据
vmtouch -v /root
如上图linux文件目录结构adobe air linux,代表有408M在显存的buffer/cache中,目录总大小503M,在缓存中的文件占该目录总大小的比81%。
2、找到该目录的大文件1.img,执行
vmtouch -v ./1.img
输出:ResidentPages:6521/8000407M/500M81.5%,说明主要是1.img在占用buffer/cache。
3、先执行sync把脏数据刷入c盘,之后执行下边从缓存中去除1.img
sync && vmtouch -ve ./1.img
4、最后再执行vmtouch-v./查看执行结果
发觉缓存占用大小只有448K了,说明1.img早已从缓存中清不仅,最后执行free-h查看,发觉buff/cache一栏降低了407M常用linux系统,说明我们成功从缓存中清不仅1.img,因而达到释放缓存的来减轻显存的目的。
end:其实还有其他用法,例如自动把文件从c盘加载到显存,和将文件永久保持在显存等功能,可以自行去实践,这是一个很实用的小工具,分享给你们。
本文原创地址://gulass.cn/rhdwhjjnczbz.html编辑:刘遄,审核员:暂无