`
chenjingbo
  • 浏览: 457044 次
  • 性别: 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 idea8中部署Jboss服务器图解,详细的说明过程和图解,方便设置和查询doc文档

    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项目源代码

    apache jboss 集群问题

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

    jboss常用问题

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

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    Jboss项目部署文档

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

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

    JBoss encore 工程和 JUnit测试自动生成工具,encore,快速开发,seam,weld,junit,shell,powermock

    JBOSS,JBoss安装部署

    JBOSS,JBoss安装部署 JBOSS,JBoss安装部署

    jboss安全性 jboss设置安全性

    帮你设置jboss安全性问题。Jboss安全设置 jboss安全性 jboss设置安全性Jboss安全设置 jboss安全性 jboss设置安全性

    JBoss启动 JBoss启动

    JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动 JBoss启动

    JavaEE源代码 jboss-common

    JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...

    在jboss上部署web应用

    JBoss完全实现了J2EE的服务栈: EJB (Enterprise JavaBeans) JMS (Java Message Service) JTS/JTA (Java Transaction Service / Java Transaction API) Servlet and JSP (JavaServer Pages) JNDI (Java Naming and ...

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

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

    linux启动jboss

    本篇文章详细介绍了如何在 Linux 平台上启动 JBoss 服务器,包括安装 JRE、安装 JBoss 服务器、启动 JBoss 服务器、关闭 JBoss 服务器和退出 SSH 会话等步骤。通过本篇文章,读者可以轻松地在 Linux 平台上启动 ...

    jboss学习资料/JBOSS使用指南

    JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南

    jboss 下载(httpwww.jboss.org)

    jboss 下载(httpwww.jboss.org)

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

    可以通过设置,让jboss的启动服务在windows 系统服务中启动,不要手工再去启动,关键是后台自动启动

Global site tag (gtag.js) - Google Analytics