`
hiskyrisa
  • 浏览: 37014 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Study:Jboss JMX调用引发的down机问题

 
阅读更多

Jboss服务器down机,从log上找不出任何问题,于是分析了一下dump文件。原来是cpu过高导致的。

top - 13:12:55 up 162 days,  3:05,  3 users,  load average: 4.59, 5.35, 5.47
Tasks: 606 total,   5 running, 601 sleeping,   0 stopped,   0 zombie
Cpu(s): 98.8%us,  0.7%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32959248k total, 26160344k used,  6798904k free,   792072k buffers
Swap: 33551744k total,        0k used, 33551744k free,  7550464k cached

 

TOP文件显示,down机时有4个thead 的cpu很高。

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                           
17321 msp       25   0 15.4g  13g  27m R 95.0 44.0  17898:13 /opt/msp/pkg/sunjdk6_25/bin/java -D[Standalone] -server -XX:+UseCo
17704 msp       25   0 15.4g  13g  27m R 94.0 44.0 904:29.49 /opt/msp/pkg/sunjdk6_25/bin/java -D[Standalone] -server -XX:+UseCo
17697 msp       25   0 15.4g  13g  27m R 93.6 44.0 662:31.68 /opt/msp/pkg/sunjdk6_25/bin/java -D[Standalone] -server -XX:+UseCo
17699 msp       25   0 15.4g  13g  27m R 92.7 44.0 127:45.35 /opt/msp/pkg/sunjdk6_25/bin/java -D[Standalone] -server -XX:+UseCo

 

PID=17321

"ApplePushNotificationReader" prio=10 tid=0x00002aeaa858a800 nid=0x43a9 runnable [0x00002aeaa29e3000]
   java.lang.Thread.State: RUNNABLE
	at java.util.Formatter$FormatSpecifier.print(Formatter.java:2821)
	at java.util.Formatter$FormatSpecifier.printString(Formatter.java:2794)
	at java.util.Formatter$FormatSpecifier.print(Formatter.java:2677)
	at java.util.Formatter.format(Formatter.java:2433)
	at java.util.Formatter.format(Formatter.java:2367)
	at java.lang.String.format(String.java:2769)
	at com.asurion.parasol.logging.log4j.Log4jLogger.debug(Log4jLogger.java:151)
	at com.asurion.parasol.avalonia.apn.impl.ApplePushNotificationServiceImpl$ReaderThread.run(ApplePushNotificationServiceImpl.java:322)
   Locked ownable synchronizers:
	- None

 

 PID=17704,17697,17699:

"Remoting "chtsydap02:MANAGEMENT" task-1" prio=10 tid=0x000000004598b800 nid=0x4521 runnable [0x00002aeac7e8d000]
   java.lang.Thread.State: RUNNABLE
	at java.util.HashMap.put(HashMap.java:374)
	at org.jboss.remoting3.jmx.RemotingConnectorServer.connectionOpened(RemotingConnectorServer.java:156)
	at org.jboss.remoting3.jmx.protocol.v1.ServerProxy.start(ServerProxy.java:167)
	at org.jboss.remoting3.jmx.protocol.v1.VersionOne.getProxy(VersionOne.java:55)
	at org.jboss.remoting3.jmx.protocol.Versions.getVersionedProxy(Versions.java:66)
	at org.jboss.remoting3.jmx.RemotingConnectorServer$ClientVersionReceiver.handleMessage(RemotingConnectorServer.java:244)
	at org.jboss.remoting3.remote.RemoteConnectionChannel$5.run(RemoteConnectionChannel.java:435)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
   Locked ownable synchronizers:
	- 0x000000054b70e5d8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

 

以上三个threand,在down机的时候,正运行到java.util.HashMap.put(HashMap.java:374)。

Jboss的代码:

http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.remoting3/remoting-jmx/1.0.1.Final/org/jboss/remoting3/jmx/RemotingConnectorServer.java

 

Google一下这个问题: java.util.hashmap infinite loop

http://stackoverflow.com/questions/13695832/explain-the-timing-causing-hashmap-put-to-execute-an-infinite-loop

 

原因是Map并非线程安全的,多线程并发,会造成Map内无限循环。

org.jboss.remoting3.jmx.RemotingConnectorServer{
private final Map<String, VersionedProxy> registeredConnections = new HashMap<String, VersionedProxy>();
    public void  connectionOpened(final VersionedProxy proxy) {
        String connectionId = proxy.getConnectionId();
        log.debugf("Connection '%s' now opened.", connectionId);
        registeredConnections.put(connectionId, proxy); // line 156
        connectionOpened(connectionId, "", null);
    }
}

 

可以把Jboss这个模块的Map改为线程安全的,但改动第三方应用,回归测试的范围不好控制。只能先重启解决。

 

 

分享到:
评论

相关推荐

    jboss远程调用JMX

    当我们谈论"jboss远程调用JMX"时,我们关注的是如何通过网络从一个JMX客户端连接到运行在JBoss服务器上的JMX服务,以便进行远程管理和监控。 首先,我们需要了解JMX的基本概念。MBean是JMX的核心,它是一个Java对象...

    jboss-logging-3.4.3.Final-API文档-中文版.zip

    赠送jar包:jboss-logging-3.4.3.Final.jar; 赠送原API文档:jboss-logging-3.4.3.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.3.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.3.Final....

    JBoss JMX实现架构

    总之,JBoss JMX的实现架构依赖于一个灵活且类型安全的类加载器系统,使得服务器能够有效地管理MBeans,支持热部署,并处理复杂的动态环境中的类型问题。理解类加载器的工作原理和Java的类型系统对于开发和维护高效...

    jboss-logging-3.4.1.Final-API文档-中文版.zip

    赠送jar包:jboss-logging-3.4.1.Final.jar; 赠送原API文档:jboss-logging-3.4.1.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.1.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.1.Final....

    Servlet引擎:JBoss与Tomcat、Jetty协同工作

    JBoss的架构基于JMX(Java Management Extensions)规范,该规范提供了一种用于管理应用服务器组件的方法。通过JMX,JBoss能够管理和监控服务器上的各种服务、组件及资源,包括但不限于EJBs、JMS、事务处理等。这...

    jboss-logging-3.4.2.Final-API文档-中文版.zip

    赠送jar包:jboss-logging-3.4.2.Final.jar; 赠送原API文档:jboss-logging-3.4.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.2.Final....

    jbossjmx 文件

    jboss jmx监控 通过jmx监控jboss应用所必须的jar文件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    jboss-logging-3.3.2.Final-API文档-中文版.zip

    赠送jar包:jboss-logging-3.3.2.Final.jar; 赠送原API文档:jboss-logging-3.3.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.3.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.3.2.Final....

    Jboss控制台jmx-console的安全设置

    Jboss控制台jmx-console的安全设置

    JBossTools实践系列:JBossESB服务开发入门

    JBossTools实践系列:JBossESB服务开发入门

    jboss-jmx.jar

    jboss-jmx.jar jboss-jmx.jar

    jmx_tomcat_jboss

    【标题】:“jmx_tomcat_jboss”指的是在Java管理扩展(JMX)框架下对Tomcat和JBoss服务器的管理和监控。 【描述】:Java管理扩展(JMX)是一种标准,允许开发者创建、管理和监控Java应用程序的组件。在这个上下...

    jboss-threads-3.1.0.Final-API文档-中文版.zip

    赠送jar包:jboss-threads-3.1.0.Final.jar; 赠送原API文档:jboss-threads-3.1.0.Final-javadoc.jar; 赠送源代码:jboss-threads-3.1.0.Final-sources.jar; 赠送Maven依赖信息文件:jboss-threads-3.1.0.Final....

    jboss-annotations-api_1.3_spec-2.0.1.Final-API文档-中英对照版.zip

    赠送jar包:jboss-annotations-api_1.3_spec-2.0.1.Final.jar; 赠送原API文档:jboss-annotations-api_1.3_spec-2.0.1.Final-javadoc.jar; 赠送源代码:jboss-annotations-api_1.3_spec-2.0.1.Final-sources.jar;...

    JBOSS4设置控制台jmx-console登录密码

    在IT领域,特别是对于使用JBOSS的企业级应用服务器的管理员和开发者而言,掌握如何设置JBOSS控制台(具体为jmx-console)的登录密码是一项至关重要的技能。这不仅关乎系统的安全性,还直接影响到对服务器监控和管理...

    jboss-websocket-api_1.1_spec-2.0.0.Final-API文档-中英对照版.zip

    赠送jar包:jboss-websocket-api_1.1_spec-2.0.0.Final.jar; 赠送原API文档:jboss-websocket-api_1.1_spec-2.0.0.Final-javadoc.jar; 赠送源代码:jboss-websocket-api_1.1_spec-2.0.0.Final-sources.jar; 赠送...

    jboss-threads-3.1.0.Final-API文档-中英对照版.zip

    赠送jar包:jboss-threads-3.1.0.Final.jar; 赠送原API文档:jboss-threads-3.1.0.Final-javadoc.jar; 赠送源代码:jboss-threads-3.1.0.Final-sources.jar; 赠送Maven依赖信息文件:jboss-threads-3.1.0.Final....

    JBOSS使用指南,JMX原理和应用,EJB3.0使用说明

    总结,理解并熟练掌握JBoss的配置、JMX的使用以及EJB3.0的编程模型,将有助于你更好地在企业环境中部署和管理Java应用程序,提升开发效率和系统稳定性。通过深入学习这些知识点,你可以更加游刃有余地应对复杂的Java...

    jboss-logging-3.3.2.Final-API文档-中英对照版.zip

    赠送jar包:jboss-logging-3.3.2.Final.jar; 赠送原API文档:jboss-logging-3.3.2.Final-javadoc.jar; 赠送源代码:jboss-logging-3.3.2.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.3.2.Final....

Global site tag (gtag.js) - Google Analytics