博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
服务器内存占用导致死机原因
阅读量:6441 次
发布时间:2019-06-23

本文共 1782 字,大约阅读时间需要 5 分钟。

最近,服务器经常死机。

1.第一步,登录服务器用top命令查看。内存占满了。

2.第二步,观察,一共16G的内存,内存占用,每天增加6G.
3.第三步,缓存区的内存占比很大。

用命令

free -g 5 或
free -m 5
即每5秒观察内存情况。

为了永久释放该内存。我编辑了这个文件。

在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效!

然后再写了一个定时脚本。(应该是写了这个脚本就不用改上面的配置,但为了保险,我还是两种方法都用上了。如有不对,请高人留言指点)

定时(每小时)清理一下缓存区的内存。

1.释放内存脚本:

在/data/sh/下创建releasememory.sh,然后把下面的代码贴进去,保存。
该脚本作用是:查询free内存比例,少于20%就清空缓存。

vi releasememory.sh

#!/bin/bashmem_total=`free -m | awk 'NR==2' | awk '{print $2}'`mem_free=`free -m | awk 'NR==2' | awk '{print $4}'`mem_used=`free -m | grep Mem | awk '{print  $3}'`echo "===========================" >> /var/log/mem.logdate >> /var/log/mem.logecho "Memory usage | [Total:${mem_total}MB][Free:${mem_free}MB][Used:${mem_used}MB]" >> /var/log/mem.logif (($mem_used != 0)); thenmem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"echo $DATA >>/var/log/mem_detect.logmem_warn=0.40mem_now=`expr $mem_per \> $mem_warn`if (($mem_now == 0)); thensyncecho 3 > /proc/sys/vm/drop_cachesecho "OK" >> /var/log/mem.logfifi
  1. 给脚本执行权限

#chmod +x releasememory.sh

  1. 把脚本添加到系统定时任务:

以下命令是把定时任务放到cron配置文件里,作用是每天1小时执行releasememory.sh脚本。

crontab -e
编辑:
服务器内存占用导致死机原因

4.重新加载cron配置和重启cron服务

#service crond reload

#service crond restart

5.查看log:

/var/log/mem.log

/var/log/mem_detect.log

当然,我也检查了一下程序代码(ThinkPHP框架的),

发现有一个定时任务是每分钟执行。
而执行的方法是一个循环更新表。即
foreach中写了对数据库的update.
虽然那个数据库中目前只有5条记录。但每执行一次就要消耗:4,896.46kb内存。一天下来有6G,可能这个也有影响的。
然后我把这段程序改写了一下,foreach中用Model而不是Db。
我们的定时任务,还有一个每5分钟同步网站代码到另一服务器(这个就没有动了,这个写很久了,之前也没引起死机)。

尽量减少可能的原因,给出解决的方案。

总之,现在这样就好了!

本文参考了:

Linux中top命令输出指标详解

inux下的缓存机制及清理buffer/cache/swap的方法梳理

linux top显示的各个符号参数意义详解

cron定时任务+释放内存脚本释放服务器缓存

如果您遇到同样的问题,采用以上方法还没有解决。

欢迎加入PHP技术问题群:QQ群号:292626152
提问交流,分享资源。

转载于:https://blog.51cto.com/phpervip/2155879

你可能感兴趣的文章
CCNP学习笔记15-RSTP
查看>>
DELL服务器iDRAC相关设置
查看>>
JVM学习笔记(一)------基本结构
查看>>
$@等特定shell变量的含义
查看>>
我的友情链接
查看>>
(超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
查看>>
策略模式、上下文与内部类的思考
查看>>
关于getCurrentUrl的获取问题
查看>>
2014年工作中遇到的20个问题:120-140
查看>>
elk系列4之kibana图形化操作【转】
查看>>
逆向project实战--Acid burn
查看>>
Apache Solr-6.0.1 (OpenLogic CentOS 7.2)
查看>>
java中List和Array相互转换
查看>>
目前支持WebGL的浏览器有哪些?
查看>>
ARKit从入门到精通(1)-ARKit初体验
查看>>
debug
查看>>
配置文件git config介绍
查看>>
IIS7的应用程序池详细解析
查看>>
java类路径classpath和包
查看>>
Information Retrieval 倒排索引 学习笔记
查看>>