本人所在公司有一个系统部署单个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);//读操作超时

tomcat宕机无法响应问题研究解决相关推荐

  1. Tomcat宕机检测以及宕机自启方法

    [颜色说明:橙色 为 命令   绿色 为 代码 ] 一. 首先在本地创建一个monitorTomcat .sh的脚本文件,写下以下脚本 #!/bin/sh # 获取tomcat进程ID  /usr/l ...

  2. tomcat宕机自动重启和每日定时启动tomcat【工具包系列】

    在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前 ...

  3. tomcat宕机自动重启和每日定时启动tomcat

    在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前 ...

  4. 服务器出现宕机可能的原因以及解决办法介绍

    原文地址 服务器宕机是指服务器因为某些原因而导致服务器无法运转,造成网络无法正常使用. 对于网站来说,服务器宕机所造成影响很大,它不但造成访客无妨对网站进行访问,甚至还可能影响到网站在搜索引擎上的收录 ...

  5. 服务器出现宕机可能的原因以及解决办法

    点击查看全文 - 本帖被 火蓝云 从 云服务器 ECS 移动到本区(2017-08-08) - 服务器宕机是指服务器因为某些原因而导致服务器无法运转,造成网络无法正常使用. 对于网站来说,服务器宕机所 ...

  6. EasyDSS虚拟直播出现状态不同步及服务宕机的问题排查与解决

    推流平台EasyDSS里有个直播的类型叫虚拟直播,虚拟直播的直播源有两种类型,一个是点播资源,一个是在线资源.点播资源可以从EasyDSS的点播服务去配置,在线资源必须是直播的源地址. 近期我们接到反 ...

  7. Linux服务器下配置tomcat宕机重启

    在服务器上创建一个bush文件,我命名为tomcatMonitor.sh 编辑tomcatMonitor.sh文件,if及fi必须成对出现,如果if then写在一行需要用;隔开 #!/bin/sh ...

  8. linux下查看tomcat宕机并自动重启

    1.在服务器上创建tomcatMonitor.sh 2.使服务器.sh文件生效chmod u+x *.sh 3.编辑tomcatMonitor.sh文件,if及fi必须成对出现,如果if then写在 ...

  9. java检测tomcat宕机_Tomcat意外宕机分析

    之前在网上看过一篇文章,是讲Tomcat进程意外退出的,我看完感觉好奇,自己也测试了下,果然是有这种问题,所以自己也借此总结一下. 先简单说下测试过程,先创建一个web服务启动 test.sh,内容如 ...

最新文章

  1. 关于空指针(指针指向为NULL)和void类型的指针的理解
  2. LeetCode-135-Candy
  3. Android Wi-Fi基本操作
  4. POI的入门:单元格样式处理
  5. WF4.0 基础篇 (六) 数据的传递 Arguments 参数
  6. WindowsXP操作系统进程详细介绍
  7. html input type=quot;filequot;,input[type='file']默认样式
  8. Google 出品的 Java 编码规范,强烈推荐,权威又科学!
  9. JavaScript的那些书
  10. arcgis建立拓扑关系
  11. 谈一谈工程中最为常用的概率图模型
  12. 智能手机网页制作12个注意事项
  13. Html设置超链接文字颜色
  14. 浅谈链改_羊了个羊_应如何设计通证模型?
  15. 计算机科学计算的方面,计算机的科学计算功能在工程领域中的应用.doc
  16. sysbench--实践--02--CPU测试
  17. cat3速度 rj45_技术词语:4G网CAT.4和CAT.3那个快?
  18. vue实现自动语音播报功能,未解决。(已用js解决20220210)
  19. 黑群晖安装ZEROTIER ONE实现内网穿透
  20. 中国菜刀能在linux上运行吗,【Web Shell】- 技术剖析中国菜刀

热门文章

  1. mysql+odbc驱动安装_MySQL的ODBC驱动下载及安装及ODBC配置
  2. 达梦数据库 图形化界面安装详细教程
  3. C#编程学习35:对MDB数据库的操作
  4. HCIA(华为体系初级网络安全工程师)(第二天)
  5. 淘宝TOP程序API接口接入教程--入门篇
  6. 免费收录网站搜索引擎登录口
  7. 企业为什么要统一身份认证管理?
  8. 嵌入式软件开发调试问题常用方法及案例分析
  9. CAA开发之工程图---工程图开发自定义核心函数 1
  10. D触发器竞赛4人抢答电路