Linux服务器中由于内存不足导致tomcat自动关闭解决方案

服务器环境:

​ 腾讯云1核2G

​ 操作系统:CentOS7

最近将项目部署到服务器后发现tomcat总是过一段时间会自动关掉。

1.查找原因

查看系统日志

cat /var/log/kern.log

发现如下内容:

Oct 23 06:43:35 localhost kernel: [30799661.517422] Out of memory: Kill process 3272 (java) score 198 or sacrifice child
Oct 23 06:43:35 localhost kernel: [30799661.520502] Killed process 3272 (java) total-vm:2543564kB, anon-rss:392108kB, file-rss:0kB

2. 原因分析

原因分析:linux会定时检查系统内存大小,发现剩余内存过小时会自动优先清理占用内存较大的进程,因此tomcat进程经常会被系统清除掉

3.解决方法

  1. 最简单的方法就是直接对云服务器内存扩容,一劳永逸
  2. 另一种方法就是设置一个定时任务执行tomcat监控脚本,每隔一段时间定时检查tomcat进程运行状态,若检查到进程不存在,则自动重启tomcat

4.方法2步骤

(1)创建脚本文件tomcatMonitor.sh

# 设置java环境变量,不设置的话运行startup.sh会报错
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/java/jdk/bin
JAVA_HOME=/usr/local/java/jdk
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin

# 获取tomcat进程ID(其中[grep -w 'tomcat']代码中的tomcat需要替换为你的tomcat文件夹名) 例如我的tomcat目录为/home/ubuntu/tomcat9
TomcatID=$(ps -ef |grep tomcat |grep -w 'tomcat9'|grep -v 'grep'|awk '{print $2}')

# tomcat启动程序(这里注意tomcat实际安装的路径)
StartTomcat=/home/ubuntu/tomcat9/bin/startup.sh
TomcatCache=/home/ubuntu/tomcat9/work

#定义要监控的页面地址
WebUrl=http://localhost:8080

#日志输出
GetPageInfo=/home/ubuntu/TomcatMonitor.Info
TomcatMonitorLog=/home/ubuntu/TomcatMonitor.log
Monitor()
{
    echo "[info]开始监控tomcat...[ $(date +'%F %H:%M:%S') ]"

    if [ $TomcatID ];then #这里判断Tomcat进程是否存在
        echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."
        # 检测是否启动成功(成功的话页面会返回状态"200")
        TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
        # 这里检测状态码为302是因为自己的项目访问首页会重定向,所以状态码为302
        if [ $TomcatServiceCode -eq 302 ];then
            echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常"
        else
            echo "[error]tomcat页面出错,请注意...状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"
            echo "[error]页面访问出错,开始重启tomcat"
            kill -9 $TomcatID # 杀掉原tomcat进程
            sleep 3
            rm -rf $TomcatCache # 清理tomcat缓存
            $StartTomcat
        fi
    else    
        echo "[error]tomcat进程不存在!tomcat开始自动重启..."
        echo "[info]$StartTomcat,请稍候..."
        rm -rf $TomcatCache
        # 启动tomcat
        $StartTomcat
    fi
    echo "--------------------------"
}
# 输出到日志文件
Monitor>>$TomcatMonitorLog

(2)对脚本文件授权

chmod 777 tomcatMonitor.sh

(3)将脚本文件加入到定时任务中

# 编辑定时任务
crontab -e

添加如下内容

#  五个*分别对应
# *       *       *      *      *        command
# minute   hour    day   month   week    command
# 全为*表示每分钟执行一次
* * * * * /home/ubuntu/tomcatMonitor.sh

保存并退出

(如果出现以下内容,则输入3进入vim编辑模式再进行编辑)

选择编辑器.png

具体crontab命令参考:https://www.cnblogs.com/zoulongbin/p/6187238.html

(4)查看任务执行情况

#查看定时任务
crontab -l
# 查看自定义日志文件
tailf /home/ubuntu/TomcatMonitor.log

输出如下内容表示定时任务正在执行


tomcat成功.png
启动.png
失败1.png

参考博客:

https://www.cnblogs.com/zoulongbin/p/6187238.html

https://blog.csdn.net/zhang41228/article/details/79860030

你可能感兴趣的:(Linux服务器中由于内存不足导致tomcat自动关闭解决方案)