之前使用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服务器图解,详细的说明过程和图解,方便设置和查询doc文档
JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性...
JBoss Forge IntelliJ IDEA插件发表在 提供对IntelliJ IDEA中的命令和向导的支持。 要显示命令列表,请按Ctrl+Alt+4 。 在MacOSX上,使用Command + Option + 4 。安装使用IDE内置插件系统: 首选项>插件>市场>搜索...
Idea搭建EJB架构Demo项目源代码
apache jboss 集群问题,集群后出现异常,收集资料!
jboss常用问题解决,提供了基本的jboss日常的一些错误的解决方案。对于jboss经常出现的问题进行了解析。
Jboss 7 + EJB 3.0 + Eclipse环境配置
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启动
JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...
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使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南JBOSS使用指南
jboss 下载(httpwww.jboss.org)
可以通过设置,让jboss的启动服务在windows 系统服务中启动,不要手工再去启动,关键是后台自动启动
Jboss项目部署文档
servlet3.0+jboss7+jsp+Mysql5.0+IDEA13 登录注册(jar包,css齐全) 有完整的CSS