LINUX内存溢出问题,修改内存回收机制
- 1 首先查看内存是否充足,执行
free -h
;看内存只剩余一百多兆, - 2 看内存自动释放的配置
cat /proc/sys/vm/drop_caches
,看到是0
参数解释:
0 不释放内存
1 释放页面缓存
2 释放数据区和信息节点
3 释放页面缓存,数据区和信息节点 - 3 临时释放内存的方法(执行在执行的时候才会生效):先执行
sync
进行数据同步,防止丢失数据,再执行echo 3 > /proc/sys/vm/drop_caches
释放所有的(注意该文件中的值默认是0,更改后是没有办法更改回0的,原因是0只是系统最开始使用的值,是自动分配的,真正的参数只有1到3) - 4 永久释放内存的方法:执行
vi /etc/sysctl.conf
在这个文件中添加一行vm.drop_caches=3
就可以永久释放内存(注意:使用永久生效时会影响整个系统的性能)
在这里具体使用的编写一个定时任务:
执行crontab -e
(5个星为别时 分时日月周 (此处是每天执行))
添加
* * */1 * * /root/relaseMem
脚本是
#!/bin/bash
# 截取Mem行的第三列和第二列进行运算(结果是已经使用的内存的比例)
d=`free |grep Mem |awk '{print $3/$2*100.0}'`
# 将结果转换为整型
x=`echo $d | awk '{print int($0)}'`
# 判定是否达到了内存使用的80%,若大于了就释放一次内存
if test $x -gt 80
then
# 将改变内容立刻写入磁盘(同步),防止数据丢失
`sync`
# 执行后会释放内存(此处的3可以更改为 1 或者 2 )
`echo 3 > /proc/sys/vm/drop_caches`
fi