Liunx手动释放buffers/cache内存

最近自己开发上的一台服务器,部署了太多服务,导致了一个内存不够用的情况,在通过free命令的查看下发现cache缓存占用到了快将近700M左右,导致我不得不去释放内存。

free命令不熟悉的请点击跳转链接

释放前内存的使用情况
在这里插入图片描述
在释放内存前我们使用sync命令先将缓存中的数据强制刷入进磁盘中。

sync

接着往/proc/sys/vm/drop_caches文件写入3来释放缓存。

echo 3 > /proc/sys/vm/drop_caches

释放后内存的使用情况
在这里插入图片描述
发现bufferscache瞬间小了不少有没有,神清气爽。

在liunx系统中经常会执行一些写日志,生成备份文件的工作,当这些文件比较大时相应的cache就会占用大量的系统内存,而这些类型的cache并不会被经常访问,所以系统会定期将这些cache flush到磁盘中。但是如果系统未及时的将这些cache flush到磁盘中的话,就会占用大量的内存导致出现swap的情况,这样会很影响系统的整体性能。

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。有一个内核配置接口 /proc/sys/vm/drop_caches 可以允许用户手动清理cache来达到释放内存的作用。这个文件有三个值:123。具体介绍如下 :

Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
:写入它将导致内核从内存中删除干净的缓存、dentries和inode,从而使内存变为空闲。

- To free pagecache: #释放页面缓存
- * echo 1 > /proc/sys/vm/drop_caches
 
- To free dentries and inodes: # 释放目录缓存和索引节点缓存
- * echo 2 > /proc/sys/vm/drop_caches
 
- To free pagecache, dentries and inodes: # 释放页面缓存,目录缓存和索引节点缓存
- * echo 3 > /proc/sys/vm/drop_caches
 
- As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
-  由于这是一个非破坏性的操作,并且脏对象是不可释放的,用户应该首先运行“sync”以确保所有缓存的对象都被释放。
- This tunable was added in 2.6.16.
- 由于这是一个非破坏性的操作,并且脏对象是不可释放的,用户应该首先运行“sync”以确保所有缓存的对象都被释放。
-这个可调项是在2.6.16中添加的。

皇家翻译:

写入它将导致内核从内存中删除干净的缓存、dentries和inode,从而使内存变为空闲。

释放页面缓存

echo 1 > /proc/sys/vm/drop_caches

释放目录缓存和索引节点缓存

echo 2 > /proc/sys/vm/drop_caches

释放页面缓存,目录缓存和索引节点缓存

echo 3 > /proc/sys/vm/drop_caches

由于这是一个非破坏性的操作,并且脏对象是不可释放的,用户应该首先运行sync命令以确保所有缓存的对象都被释放。

这个可调项是在2.6.16中添加的。

sync命令

sync 指令会将存于 buffer 中的资料强制写入硬盘中。

sync
原创文章 35 获赞 14 访问量 4771

猜你喜欢

转载自blog.csdn.net/weixin_39128265/article/details/106080150
今日推荐