如何手动释放Linux内存的方法

ggp 技术 2018-07-24 396 次浏览

当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题。

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:

首先,查看/proc/sys/vm/drop_caches的值

[root@server test]# cat /proc/sys/vm/drop_caches

0

值默认为0

然后,运行sync命令

[root@server test]# sync

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

最后,输入手动释放内存的命令

[root@server test]# echo 1 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之间的数字,代表不同的含义
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存


释放完内存后改回去让系统重新自动分配内存
echo 0 >/proc/sys/vm/drop_caches

free -m #看内存是否已经释放掉了。

如果我们需要释放所有缓存,就输入下面的命令
[root@server test]# echo 3 > /proc/sys/vm/drop_caches

回顶部