tomcat宕机无法响应问题研究解决

tomcat宕机无法响应问题研究解决本人所在公司有一个系统部署单个tomcat上,该系统由前开发人员开发。本人于两年前接手,在对该系统进行开发运维过程中,先后解决了两种tomcat宕机无法提供服务情况,具体如下:(1)JVM内存不足

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

本人所在公司有一个系统部署单个tomcat上,该系统由前开发人员开发。本人于两年前接手,在对该系统进行开发运维过程中,先后解决了两种tomcat宕机无法提供服务情况,具体如下:

(1)JVM 内存不足

主Tomcat运行过程出现宕机无法响应的现象,刚开始无法定位问题时只能在挂死出现时采用手工重启的方式解决。后在服务器配置tomcat每天晚上重启的策略,每天宕机的次数相对原来有所减少,但仍然会随机出现。经分析大概判断是内存不足导致。采取的措施是增大jvm的内存,但原服务器安装的是32位jdk6,jvm内存最大只能设置的2G,因此通过升级JDK为64位,将jvm内存设置到4G,并对系统进行部分模块的适应性调整。重新部署后,系统宕机次数大幅度减少。频次降到一两个月一次。此次改造,系统稳定性得到较大的提升。

(2)程序逻辑问题

在解决因JVM内存不足导致Tomcat频繁宕机问题后,该系统又出现了另外一种情形的宕机。就是某模块的java代码在开发环境下运行正常,但是编译并发布到正式系统上,只要执行报告审核操作,系统随机马上挂死,无法响应,端口telnet不通。这个问题从发现到解决,期间经历了半年的时间(因为一直往java后台方向去排查,事后才知道是已离职的同事挖的历史大坑啊,排查方向有误,我操!先吐口老血再慢慢说)。

刚开始一直感到很疑惑,一样的代码,为什么以前编译的文件运行正常,新编译的就出错呢?为什么挂死会随机?正值不久前升级了jdk版本(解决上面宕机问题),以为是编译环境导致,于是换回原版本jdk进行编译,仍然出错。找到原同事发代码给他让其帮忙编译,仍然出错。真是百思不得姐了。此外因为是上班时间宕机,因此出现状况时就直接登陆服务器,tomcat进程还在,控制台已停止输出,处于挂死状态,情况紧急就直接重启tomcat。期间断断续续通过各种方式编译部署,但都没有最终解决问题。本宝宝是个责任心爆棚的人,不解决问题,吃不下饭啊。不扯了,解决过程如下:

1)本地再次编译该模块代码并部署,启动tomcat,开启jconsole对tomcat进行监控;

2)执行该模块的报告批准操作,tomcat随即处于挂死状态,报告审核没有这个问题;查看监控内存、cpu使用率正常;线程数上到几千,都是http请求,一筹莫展之际,随机点了下http请求线程,描述中出现了一个该action的method(事前无论如何都没想到报告批准操作会调用到这个不相关的method)。

3)到开发环境查这个method,尼玛,是谁写的一个死循环在这里,站出来,我保证不打死你,操你大爷啊,

坑死爹爹了。死循环如下:

public ActionForward updateReport(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

{

String reportId =request.getParameter(“reportId”);

String url =”http://localhost/xxx/xxx.do?method=updateReport&reportId=” + reportId;

URL myUrl = null;

try {

myUrl = new URL(url);

} catch (MalformedURLException e) {

e.printStackTrace();

}

try {

myUrl.openStream();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

4)再查jsp,果然在报告批准页面里面,当报告状态为7的时候调用了这个method,不停的向系统发出http请求,当请求数上到2千左右,tomcat拒绝了响应,tomcat挂死。元凶终于找到了,但是没查出来前是无论如何也想不到会调用到这个垃圾啊。

5)此外审核不会出现宕机是因为当批准的时候才调用,就解释了为何审核不会导致宕机。但原版代码为什么没有问题呢?再追溯代码,原版代码地址不完全一样,端口不同,至此一切真相大白了。

6)最后这个method即使不是死循环,里面有正确的逻辑代码,但URL的使用一定要谨慎,需要设置等待超时,否则一样容易出现tomcat无期等待致死的情况。

URL myUrl = new URL(url);

HttpURLConnection con = (HttpURLConnection)myUrl.openConnection();

con.setConnectTimeout(8000);//连接超时

con.setReadTimeout(8000);//读操作超时

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

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

(0)
上一篇 2022年7月1日 下午6:36
下一篇 2022年7月1日 下午6:36


相关推荐

  • C++学生选课系统 【含 代码】

    C++学生选课系统 【含 代码】1.系统分析本系统的用户分为普通用户和管理员两类,其中普通用户包括教师和学生。普通用户只能对自己的信息进行查询与修改,管理员则拥有所有功能权限。1.1模块划分学生选课系统,在登录模块之后,根据系统用户的身份不同划分为三个模块,即:学生模块、教师模块和管理员模块。1.2功能模块描述(1)登录模块登录模块用于用户身份选择与用户登录,完成基本的验证。根据所填信息进行…

    2022年10月15日
    5
  • 向量内积/点积_两个向量的内积和外积

    向量内积/点积_两个向量的内积和外积向量内积/点积在向量空间Rn中,自然基下,向量x=(x1,…,xn)和y=(y1,…,yn)在向量空间\mathbb{R}^n中,自然基下,向量\boldsymbol{x}=(x_1,\ldots,x_n)和\boldsymbol{y}=(y_1,\ldots,y_n)在向量空间Rn中,自然基下,向量x=(x1​,…,xn​)和y=(y1​,…,yn​)的点积(dotproduct),或称内…

    2026年3月10日
    4
  • fastJson 解析json字符串

    fastJson 解析json字符串packagecom zhw project domain importcom alibaba fastjson JSON importcom alibaba fastjson JSONArray importcom alibaba fastjson JSONObject importjava util ArrayList importjava util List 正常防疫对象 antiepidemic normal authorruoyi

    2026年3月19日
    2
  • phpstrom2021 激活码【2021最新】

    (phpstrom2021 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月22日
    49
  • 多目标优化算法(一)NSGA-Ⅱ(NSGA2)[通俗易懂]

    多目标优化算法(一)NSGA-Ⅱ0.前言这个算法是本人接触科研学习实现的第一个算法,因此想在这里和大家分享一下心得。1.算法简介NSGA-Ⅱ算法,即带有精英保留策略的快速非支配多目标优化算法,是一种基于Pareto最优解的多目标优化算法。1.1Pareto支配关系以及Pareto等级Pareto支配关系:对于最小化多目标优化问题,对于n个目标分量fi(x),i=1…nf_i(…

    2022年4月3日
    802
  • 从API集成到意图驱动:深度解析实在Agent在复杂ERP⽘环境下的非标接口处理架构

    从API集成到意图驱动:深度解析实在Agent在复杂ERP⽘环境下的非标接口处理架构

    2026年3月14日
    3

发表回复

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

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