`
chenjingbo
  • 浏览: 460108 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Idea关闭JBoss造成死锁的问题

 
阅读更多

之前使用Idea,如果启动JBoss异常,然后点击关闭JBoss,就会造成整个Idea挂了.只有通过任务管理器关闭对应的idea和java进程才行.今天终于得空,来解决这个问题.

造成启动JBoss,终于出现异常,然后点关闭,出现死锁.果断使用visualvm查看.(很奇怪的是 jconsole检测不到死锁.)

heapdump summary 写道

“JBoss Shutdown Hook” daemon prio=10 tid=0x0000000056fa8000 nid=0×2525 waiting for monitor entry [0x0000000047184000]

java.lang.Thread.State: BLOCKED (on object monitor)

at org.jboss.web.AbstractWebContainer.stop(AbstractWebContainer.java:494)

死锁的问题出现.然后直接google,发现网上有一篇介绍,原因是

 

http://rdc.taobao.com/team/jm/archives/1256 写道
这里涉及到两个线程,主线程main和JBOSS的shutdown hook线程。

main线程在部署应用时,首先会获得org.jboss.web.tomcat.service.JBossWeb类的对象的锁,在获得锁后,遇到System.exit()调用,JVM会在System.exit()中调用所有注册过的shutdown hook,其中也包括JBOSS的shutdown hook,main线程会等待所有的shutdown hook执行完毕后,再恢复自身的执行,关闭虚拟机。

JBOSS的shutdown hook的行为是关闭JBOSS,在关闭之前先卸载所有部署于JBOSS的应用,卸载应用时又会尝试获取org.jboss.web.tomcat.service.JBossWeb类的对象的锁,但这个锁被main线程占有,没有释放,导致JBOSS的shutdown hook线程挂起。

此时的状态是,main线程等待shutdown hook执行完毕,shutdown hook等待main线程占有的锁,产生死锁。


基本确定问题,开始找解决的办法..直接查看对应的线程堆栈,看看哪里调用了system.exit.

查看后发现..

写道
Local Variable: java.lang.Shutdown$Lock#2
at java.lang.Shutdown.exit(Shutdown.java:212)
at java.lang.Runtime.exit(Runtime.java:107)
Local Variable: java.lang.Runtime#1
at java.lang.System.exit (System.java:960)
at com.taobao.session.config.ConfigServerXmlConfig.fetchConfigsFromData (ConfigServerXmlConfig.java:84)
Local Variable: com.taobao.session.IllegalConfigException#1
at com.taobao.session.config.ConfigServerXmlConfig.access$000(ConfigServerXmlConfig.java:18)
at com.taobao.session.config.ConfigServerXmlConfig$1.receiveConfigInfo(ConfigServerXmlConfig.java:32)
at com.taobao.session.config.AbstractConfigServerConfig.waitFor(AbstractConfigServerConfig.java:146)
Local Variable: com.taobao.session.config.ConfigServerXmlConfig$1#1

查看对应的类,果然

 } catch (Exception e) {
            diamondLog.error("receive wrong sessionConfig and discard:" + configInfo,e);
            if (initialized.get()) {
            	diamondLog.error("receive wrong sessionConfig and discard it", e);
                return;
            } else {
            	diamondLog.error("receive wrong sessionConfig and webServer halt", e);
                System.exit(0);




            }
        }

差不多就是session init的时候出错了. 同事雷文根据我的IP在后台帮忙看了对应的出错日志.


可以看到是对应的group传错了.

 <filter>
        <filter-name>sessionFilter</filter-name>
        <filter-class>com.taobao.session.TaobaoSessionFilter</filter-class>
        <init-param>
            <param-name>tbsessionConfigGroup</param-name>
            <param-value>${tbsession.configserver.group}</param-value>
        </init-param> 
        <init-param>
            <param-name>isloginSessionCheck</param-name>  
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>traceEnabled</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>

到这里基本就明确了,重新package..重启,问题解决.

 

但是每次重启idear都会重新update一次.所以又把没有替换的代码copy到对应的目录,对于这个问题.解决方法是关闭启动的时候的make.如下

 


 

 

最后,万分感谢雷文童鞋的帮助

  • 大小: 19.5 KB
  • 大小: 60.4 KB
分享到:
评论

相关推荐

    在IntelliJ idea8中部署Jboss服务器图解

    "在IntelliJ IDEA 8中部署Jboss服务器图解" IntelliJ IDEA 8是 JetBrains 公司开发的一款功能强大且灵活的集成开发环境(IDE),它支持多种programming语言,包括Java、Python、Ruby、PHP等。Jboss则是一款流行的...

    JBoss jBPM

    JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性...

    intellij-idea-plugin:JBoss Forge IntelliJ IDEA插件

    JBoss Forge IntelliJ IDEA插件发表在 提供对IntelliJ IDEA中的命令和向导的支持。 要显示命令列表,请按Ctrl+Alt+4 。 在MacOSX上,使用Command + Option + 4 。安装使用IDE内置插件系统: 首选项&gt;插件&gt;市场&gt;搜索...

    Idea搭建EJB架构Demo项目源代码

    【标题】"Idea搭建EJB架构Demo项目源代码"涉及的是使用IntelliJ IDEA(简称Idea)这个强大的Java集成开发环境来构建一个基于EJB(Enterprise JavaBeans)架构的示例项目。EJB是Java EE(企业版)平台的核心部分,...

    apache jboss 集群问题

    apache jboss 集群问题,集群后出现异常,收集资料!

    jboss-service.xml could not be opened, does it exist 配置jboss遇到的问题

    ### jboss-service.xml could not be opened, does it exist 配置jboss遇到的问题 在进行JBOSS服务器的配置过程中,经常会遇到一个令人头疼的问题:“jboss-service.xml could not be opened, does it exist?”这样...

    JBoss encore 工程和 JUnit测试自动生成工具2

    【JBoss encore工程与JUnit测试自动生成工具2详解】 在软件开发过程中,高效和便捷的开发工具对于提高生产力至关重要。JBoss encore是一个强大的框架,它为Java开发者提供了丰富的功能,加速了企业级应用的开发。本...

    jboss常用问题

    jboss常用问题解决,提供了基本的jboss日常的一些错误的解决方案。对于jboss经常出现的问题进行了解析。

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    jboss如何在windows系统服务中启动

    在IT行业中,JBoss是一个广泛使用的Java应用服务器,它提供了许多功能,如部署和管理Web应用程序、事务处理、安全管理等。对于Windows用户来说,将JBoss配置为系统服务可以实现自动启动,避免每次开机时手动开启,...

    jboss eap 6.2或as 7 以上乱码问题解决

    ### jBoss EAP 6.2 或 AS 7 以上乱码问题解决 #### 背景介绍 在使用jBoss Enterprise Application Platform (EAP) 6.2 或 jBoss Application Server (AS) 7及以上版本的过程中,可能会遇到字符编码问题,即所谓的...

    解决jboss中启动的优先级的问题

    标题提及的"解决jboss中启动的优先级的问题"是针对JBoss服务器如何确保特定应用或服务在其他依赖项启动后才启动的技术细节。 首先,我们需要理解JBoss中的部署模型。JBoss作为一款开源的应用服务器,它遵循Java EE...

    JBOSS,JBoss安装部署

    【JBOSS,JBoss安装部署】 JBoss是Red Hat公司开发的一款开源的应用服务器,它基于Java EE(Enterprise Edition)规范,提供了全面的企业级应用程序部署和管理解决方案。本篇文章将详细讲解JBoss的安装和部署过程,...

    jboss 下载(httpwww.jboss.org)

    3. 关闭 JBoss,可以通过执行 `%JBoss_HOME%\bin\shutdown.bat -S` 命令。 4. 配置 JBoss 的端口,例如将 HTTP 服务监听端口改为 80,需编辑 `jbossweb-tomcat41.sar\META-INF\jboss-service.xml` 文件。 JBoss 的...

    Jboss项目部署文档

    Jboss 项目部署文档 Jboss 项目部署文档是指在 Jboss 服务器上部署项目的详细步骤,包括环境变量的配置、项目打包、配置文件的修改、JNDI 的配置等。以下是 Jboss 项目部署文档的详细知识点: 一、环境变量配置 ...

    jboss7.1 linux版本

    JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...

    jboss-eap-7.2.6-patch

    JBoss EAP 7.2.6 版本是一个重要的更新,包含了多个版本的 GA(General Availability)补丁以及一个CP(Cumulative Patch)更新,旨在提升性能、增强安全性和修复已知问题。 1. **补丁的重要性** 补丁是软件维护的...

Global site tag (gtag.js) - Google Analytics