问题描述
-
当前使用 虚拟机的 ubuntu,当遇到编译工具链等大内存的需求场景时,遇到了编译失败的问题,编译失败并不是由于代码错误引起,而是内存不够。
-
ubuntu 属于 Linux,可以使用 Linux shell 释放内存操作吗?
手动释放内存
free
命令只能查看当前内存的使用情况,但是不能清零缓存页,不能是否内存
$ free
total used free shared buff/cache available
Mem: 8092124 2813336 128992 5924 5149796 4975432
Swap: 2097148 618444 1478704
-
如果发现
buff/cache
很大,也会造成当前的内存不足,可以通过drop_caches
是否 buff/cache,让当前的可用内存更充足 -
drop_caches 相关的介绍 https://www.kernel.org/doc/Documentation/sysctl/vm.txt
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
echo 3 > /proc/sys/vm/drop_caches
-
当前测试了一下,这个几个命令,如
echo 3 > /proc/sys/vm/drop_caches
需要管理员权限,并且最好切换到 管理员账号,才能正常执行 -
echo 3 > /proc/sys/vm/drop_caches
的力度更大,效果更明显,当前清理的缓存,后续需要重新加载,但能临时解决内存不足问题,不需要重启系统
sudo 执行 drop_caches
- 非管理员账号,sudo 执行
sudo echo 3 > /proc/sys/vm/drop_caches
,发现报错,
$ sudo echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied
- 搜索了一些解决方法,可以使用以下的命令代替:
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
或者 echo 1 |sudo tee /proc/sys/vm/drop_caches
- 清零缓存后,发现可用内存明显变大了
free
total used free shared buff/cache available
Mem: 8092124 2814496 4767212 5924 510416 4974296
Swap: 2097148 618444 1478704
小结
- 非必要,不需要执行手动释放内存或者缓存的操作,可能引起系统运行异常,比如某个应用或者服务无法正常工作