1. 通过命令`free -m`查看当前Linux系统的内存使用情况,包括总内存数、已使用的内存数和空闲的内存数。这样可以对系统的内存状况有一个直观的了解。
2. 找出占用内存过高的进程。可以使用`top`命令查看内存占用情况,找出占用内存最高的进程并结束它。
按shift+M使应用按内存使用率排序,定位到第一个使用内存最高的应用,并找到对应的PID。
kill -15 pid,这种方式可以快速释放部分内存资源。
3. 如果发现buff/cache占用过高,可以考虑手动清缓存。执行以下命令需要root权限:
清理缓存的命令
- 清除pagecache:
echo 1 > /proc/sys/vm/drop_caches
- 清除回收slab分配器中的对象(包括目录项缓存和inode缓存):
echo 2 > /proc/sys/vm/drop_caches
- 清除pagecache和slab分配器中的缓存对象:
echo 3 > /proc/sys/vm/drop_caches
说明:
/proc是一个虚拟文件系统,我们可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存。
0 – 不释放缓存
1 – 释放页面缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
数字1是用来清空最近放问过的文件页面缓存
数字2是用来清空文件节点缓存和目录项缓存
数字3是用来清空1和2所有内容的缓存。
4.对于编译过程中出现的内存不足问题,也可以尝试优化编译参数,减小编译过程中的内存使用。
注意:
实际项目中的经验告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。我觉得既然核心是可以快速清空buffer或cache,但核心并没有这样做(默认值是0),我们不应该随便去改变它。
一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。当发生内存不足、应用获取不到可用内存、OOM错 误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了,所以说一般情况下linux都不用经常手动释放内存。