【致远FAQ】致远OA宕机之Tomcat异常宕机

【致远FAQ】致远OA宕机之Tomcat异常宕机问题描述tomcat进程已经不在; 由于在启动命令行参数中增加了相关的日志监控,重点查找JVM内存溢出、jvm的crash的日志进行问题定位; 没有.hprof文件生成【基本可以推论没有出现JVM内存溢出】 没有hs_err_xxx.log文件生成【基本可以推论JVM没有出现严重的crash异常】问题分析1)通过catalina.log看出tomcat出现了非正常关闭操作下的停机;如果是正常停机会在输出图1的日志前输出如图2所示的内容2)tomcat停机的时..

大家好,又见面了,我是你们的朋友全栈君。

问题描述

  1. tomcat进程已经不在;
  2. 由于在启动命令行参数中增加了相关的日志监控,重点查找JVM内存溢出、jvm的crash的日志进行问题定位;
  3. 没有.hprof文件生成【基本可以推论没有出现JVM内存溢出】
  4. 没有hs_err_xxx.log文件生成【基本可以推论JVM没有出现严重的crash异常】

问题分析

1)通过catalina.log 看出tomcat出现了非正常关闭操作下的停机;如果是正常停机会在输出图1的日志前输出如图2所示的内容

【致远FAQ】致远OA宕机之Tomcat异常宕机

【致远FAQ】致远OA宕机之Tomcat异常宕机

2)tomcat停机的时间发生在15:32:28秒
3)查看应用日志,没有发现存在业务异常;但是佐证了tomcat停机的时间,如图3所示:

【致远FAQ】致远OA宕机之Tomcat异常宕机

4)对比tomcat停机的时间,查看操作系统的日志/var/log/messages在15:32:28相关日志内容,如图4所示,可以得出以下信息:

【致远FAQ】致远OA宕机之Tomcat异常宕机

 5)tomcat宕机、sshd进程收到断开连接的事件都发生在同一秒。

6)该日志中也记录了发出ssh断开连接事件的客户端ip地址(该信息非常有用,可以根据ip地址定位到操作者,并通过操作者了解问题发生前相关操作信息,这为后期的缩小问题范围并将问题复现提供了很有价值的线索)。
7)至此,发现了一个重要线索:tomcat的退出与sshd的session关闭发生在同一时刻;即使是巧合,这个信息也是值得去深究。
8)我们知道,tomcat在以下两种情况下会触发shutdownhook:(1)代码里面执行了System.exit;(2)tomcat进程接收到了除9以外的会引起退出的信号量;我们对第一种情况进行了代码扫描并逐一的排除,不存在业务代码调用System.exit的场景;对于第(2)种场景的排查很显然需要针对tomcat的启动脚本。
9)基于此,根据断开ssh的session会话的ip地址,定位到相应的操作者,获取到当时执行的操作命令项目,了解到采用seeyonupdate脚本执行启动;以下图示是更新脚本片段;从代码片段来看,在启动进程里面增加了一个tail语句。

【致远FAQ】致远OA宕机之Tomcat异常宕机

【致远FAQ】致远OA宕机之Tomcat异常宕机

【致远FAQ】致远OA宕机之Tomcat异常宕机

 10)现在的问题焦点就转移到,原有启动脚本里面增加了一行tail语句导致tomcat异常退出的原因:从脚本的执行过程来看,tomcat启动后,当前shell进程并没有退出,而是挂在tail进程上。这种情况下,如果用户直接关闭ssh终端的窗口,sshd会把SIGHUP信号传递给bash进程,bash会把SIGHUP传递给seeyonupdate进程及该进程所属的进程组的所有进程成员。(java后台进程继承了父进程startup.sh的pgid,所以java进程仍属于进程组里的成员,收到SIGHUP后会退出。

原因定位

综合以上过程的分析,我们可以把整个tomcat异常退出的流程串联一下:
1)操作用户在ssh终端执行了seeyonupdate脚本,对综合办公应用平台进行升级部署与启动;脚本的最后,通过执行tail命令,对日志信息进行查看(此时,seeyonupdate脚本并未退出,而是挂在了tail进程上)
2)用户关闭了ssh终端窗口或网络断开导致ssh连接断开,sshd会把SIGHUP信号发给了窗口内的bash进程,bash进程会把SIGHUP传递给seeyonupdate进程及该进程所属的进程组的所有进程成员。(java后台进程继承了父进程startup.sh的pgid,所以java进程仍属于进程组里的成员,也会收到SIGHUP信号)
Tomcat收到SIGHUP信号后,会激活SIGHUP handler线程(如图6所示);该线程会触发Tomcat的shutdownhook函数(如图7所示),在该函数中会执行tomcat退出时的资源销毁操作(如图8所示):

【致远FAQ】致远OA宕机之Tomcat异常宕机

图6 jstack堆栈快照

【致远FAQ】致远OA宕机之Tomcat异常宕机

图7 jstack堆栈快照

 【致远FAQ】致远OA宕机之Tomcat异常宕机

 图8 ctp.log日志片段

修改与建议

        该问题的解决,也能解释之前项目现场其他环境下没有异常日志生成,却出现了tomcat异常宕机的情况。

技术方面

方法1:只需要在tail命令后面加&,把tail命令转后台执行,让seeyonupdate进程正常退出

【致远FAQ】致远OA宕机之Tomcat异常宕机

方法2:在seeyonupdate对应的脚本中,增加“set -m”,开启作业控制

 【致远FAQ】致远OA宕机之Tomcat异常宕机

 针对这两种修改方法进行了验证,tomcat的进程不会销毁

管理方面

1)建立对运维脚本的代码审查过程;
2)对于运维脚本加强多场景下的功能测试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163641.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 仪器保养 | 安捷伦DSO-X 2002A示波器自检测/自校准

    仪器保养 | 安捷伦DSO-X 2002A示波器自检测/自校准安捷伦DSO-X2002A示波器自检测、自校准首先上电开机1.按下Utility-服务-Diagnostics-硬件本机自检-前面板自检2.按下Utility-服务-Calibration–按下后盖CAL-开始用户校准-根据提示完成操作感兴趣的话就跟安迪一起来学习吧~仪器保养|安捷伦DSO-X2002A示波器自检测/自校准…

    2022年10月11日
    3
  • ipconfig配置ip地址(为什么输入ipconfig没有用)

     IP可以分为PublicIP和PrivateIP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有PublicIP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP进行管理,而大家可以共用一个IP去连接上公网,这样,就省下了许多宝贵的PublicIP。你有没有发现,你每次使用ipconfig查到的地址,要么就是172….

    2022年4月15日
    85
  • 规范化理论:多值依赖的理解_依赖关联泛化实现

    规范化理论:多值依赖的理解_依赖关联泛化实现多值依赖的定义我们用一个例子来引出多值依赖(MultivaluedDependency,MVD)的含义。假设学校中一门课程可由多名教师讲授,教学中他们使用相同的一套参考书,这样我们可用下图的非规范化的关系来表示课程C、教师T和参考书B间的关系。关系CTB如果关系CIB转化成规范化的关系,如图所示。规范后的关系CTB由此可以看出,规范后的关系模式…

    2025年7月28日
    3
  • 用html设计一个动漫网站_HTML一个介绍的页面代码

    用html设计一个动漫网站_HTML一个介绍的页面代码HTML静态网页作业——海贼王主题网页设计制作6个页面(HTML+CSS)临近期末,你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适的模板?等等一系列问题。你想要解决的问题,在这篇博文中基本都能满足你的需求~原始HTML+CSS+JS页面设计,web大学生网页设计作业源码,这是一个不错的网页制作,画面精明,非常适合初学者学习使用。作品介绍1.网页作品简介方面:黑色通用的IT程序员资讯交流个人博客网站模板。喜欢的可以下载,文章页支

    2025年9月15日
    11
  • 【图文详解】【pycharm】pycharm更换背景颜色

    【图文详解】【pycharm】pycharm更换背景颜色首先 File Settings 然后如图所示 其中下拉选择有各种背景 下方有效果 可根据个人喜好设置最后 琉佳提醒 不要忘记保存 未保存等于没有设置

    2025年9月18日
    4
  • iOS APP上架被拒重新提交审核教程

    iOS APP上架被拒重新提交审核教程

    2021年7月11日
    115

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号