0
点赞
收藏
分享

微信扫一扫

七、Linux服务器总是OOM杀掉我的java进程

MaxWen 2022-06-21 阅读 68

一、问题

  这几天将项目上线,但总是过一会儿要么redis挂掉,要么是mysql挂掉,要么是我的java项目挂掉。使用 top 命令发现,2G的内存只是用了1.2G,但是 free 内存就只有几十兆,大部分的内存都在 buff/cache 区域。

二、解决办法

1.释放内存脚本 ​​freemem.sh​​:

#! /bin/sh
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /home/freemem/logs/mem.log
date >> /home/freemem/logs/mem.log
echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> /home/freemem/logs/mem.log
if [ $free -le 150 ] ; then
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches
used_ok=`free -m | awk 'NR==2' | awk '{print $3}'`
free_ok=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> /home/freemem/logs/mem.log
echo "OK" >> /home/freemem/logs/mem.log
else
echo "Not required" >> /home/freemem/logs/mem.log
fi
exit 1

2.为脚本 ​​freemem.sh​​设置可执行权限

chmod u+x freemem.sh

3、使用crontab -e命令编辑当前用户的crontab

#编辑定时任务脚本
crontab -e
#每隔30分钟执行一下清理内存脚本
*/30 * * * * /home/freemem/freemem.sh

4、重启crond服务

/sbin/service crond restart

5、查看crond服务是否重启成功

/sbin/service crond status

参见​​Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案​​


举报

相关推荐

0 条评论