zoukankan      html  css  js  c++  java
  • 解决OOM-killer导致的tomcat进程丢失

    环境:32G内存,16CPU,Centos7

    现象:Linux服务器上部署了tomcat+javaweb项目。经常出现tomcat进程丢失的情况,导致业务中断,logs无提示信息。查看系统日志后,发现对应时间点,系统自动kill掉了tomcat进程,如下

     

    解决方案:

    1、将tomcat进程临时添加到保护机制

    #ps -ef |grep tomcat
    #echo -17 > /proc/pid/oom_adj

    2、调整linux系统的内存分配策略

    #vi /proc/sys/vm/overcommit_memory
    

    overcommit_memory=0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
    overcommit_memory=1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
    overcommit_memory=2, 表示内核允许分配超过所有物理内存和交换空间总和的内存 


    3、对tomcat的JVM内存进行控制,修改Xmx和Xms(参考JVM内存的设置规则)

    #cd $tomcat_home/bin
    #vi catina.sh


    4、编写定时监控脚本,若tomcat进程丢失,则自动重启

    #!/bin/bash
    #2021-02-04
    #created by yaohuimo
    #
    date=$(date +%Y-%m-%d_%H:%M:%S)
    ##tomcat的进程id
    TomcatID=$(ps -ef | grep tomcat | grep java | awk ' { print $2 } ')
    ##监控脚本日志存放路径
    recorddir=/xxx/tool
    ##监控脚本日志文件名称
    recordfile=xxx-monitor.$(date +%Y-%m-%d).log
    ##tomcat启动文件所在路径
    tomcaturl=/xxx/bin
    
    if [ ! -d ${recorddir} ]; then
        mkdir -p ${recorddir}
    fi
    
    if [[ $TomcatID ]]; then
        echo "$TomcatID,${date},tomcat服务运行正常!" >>${recorddir}/${recordfile}
    else
        sh ${tomcaturl}/startup.sh
        echo "${date},重启了tomcat服务!" >>${recorddir}/${recordfile}
    fi
    

     设置定时任务

    #crontab -e

     

    备注:上述方法只是临时规避措施,保证业务不长时间中断。本质原因应该是应用的内存占用过高,没有及时释放,建议分析业务接口和代码

    参考:

    https://www.cnblogs.com/leo001/articles/10508295.html
    https://blog.csdn.net/weixin_33802505/article/details/91752961


  • 相关阅读:
    ps基础磨皮(混入了奇怪的博客~)
    spring boot配置ssl
    Chrome自动翻译失效的解决办法
    小红书数美滑块验证码
    使用DataLoader报错AttributeError: 'int' object has no attribute 'numel'
    glidedsky-爬虫-验证码-1
    glidedsky-爬虫-雪碧图-2
    glidedsky-爬虫-雪碧图-1
    glidedsky-爬虫-CSS反爬
    glidedsky-爬虫-字体反爬-1
  • 原文地址:https://www.cnblogs.com/yaohuimo/p/14382385.html
Copyright © 2011-2022 走看看