`
boriszhang78
  • 浏览: 21212 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

WAS7 EJB OOM问题

阅读更多

在WAS7.0.0.13版本上分布式发布ejb和web,web和ejb不在一个集群,且不在一个server哦情况下,web调用EJB的时候出现OOM错误,报错信息如下:

[11-3-1 3:32:06:132 CST] 00000021 SystemOut     O ADMINISTRATOR:123456:0:1:undefined:192.168.0.103:CrbGu3tv3gf37HzkT5r3BW7::
[11-3-1 3:32:11:331 CST] 00000021 UserManagerDe E com.xx.xxxxxx.web.UserManagerDefaultImpl loginIn java.lang.RuntimeException: java.rmi.ServerError: Error occurred in server thread; nested exception is: 
	java.lang.OutOfMemoryError: 
	>> SERVER (id=4773e3aa, host=zmt400) TRACE START:
	>>    java.lang.OutOfMemoryError
	>>	 at com.ibm.rmi.iiop.CDRReader.readBytesForString(CDRReader.java:2296)
	>>	 at com.ibm.rmi.iiop.CDRReader.readStringOrIndirection(CDRReader.java:489)
	>>	 at com.ibm.rmi.iiop.CDRReader.read_codebase_URL(CDRReader.java:2890)
	>>	 at com.ibm.rmi.iiop.CDRReader.fast_read_value(CDRReader.java:1910)
	>>	 at com.ibm.rmi.iiop.CDRReader.read_value(CDRReader.java:2017)
	>>	 at com.xx.xxxx.common.service.ejb._EJSRemoteStatelesscom_xx_xxxxx_common_service_e_d15d50c6_Tie.loginIn__com_xx_xxxxx_privilege_UserInfoInterface__CORBA_WStringValue__CORBA_WStringValue__long__long_long__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue(_EJSRemoteStatelesscom_xx_xxxxx_common_service_e_d15d50c6_Tie.java:206)
	>>	 at com.xxx.xxxxx.common.service.ejb._EJSRemoteStatelesscom_xx_xxxxx_common_service_e_d15d50c6_Tie._invoke(_EJSRemoteStatelesscom_xx_xxxxxx_common_service_e_d15d50c6_Tie.java:127)
	>>	 at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:622)
	>>	 at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:475)
	>>	 at com.ibm.rmi.iiop.ORB.process(ORB.java:513)
	>>	 at com.ibm.CORBA.iiop.ORB.process(ORB.java:1574)
	>>	 at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2841)
	>>	 at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2714)
	>>	 at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:63)
	>>	 at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
	>>	 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1563)
	>> SERVER (id=4773e3aa, host=zmt400) TRACE END.

[11-3-1 3:32:11:341 CST] 00000021 BaseServer    E com.xx.xxxxx.web.BaseServer processLogin 登录错误
                                 java.lang.RuntimeException: java.rmi.ServerError: Error occurred in server thread; nested exception is: 
	java.lang.OutOfMemoryError: 
	>> SERVER (id=4773e3aa, host=zmt400) TRACE START:
	>>    java.lang.OutOfMemoryError
	>>	 at com.ibm.rmi.iiop.CDRReader.readBytesForString(CDRReader.java:2296)
	>>	 at com.ibm.rmi.iiop.CDRReader.readStringOrIndirection(CDRReader.java:489)
	>>	 at com.ibm.rmi.iiop.CDRReader.read_codebase_URL(CDRReader.java:2890)
	>>	 at com.ibm.rmi.iiop.CDRReader.fast_read_value(CDRReader.java:1910)
	>>	 at com.ibm.rmi.iiop.CDRReader.read_value(CDRReader.java:2017)
	>>	 at com.xx.xxxxx.common.service.ejb._EJSRemoteStatelesscom_xx_xxxx_common_service_e_d15d50c6_Tie.loginIn__com_xx_xxxxxx_privilege_UserInfoInterface__CORBA_WStringValue__CORBA_WStringValue__long__long_long__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue(_EJSRemoteStatelesscom_xx_xxxxxx_common_service_e_d15d50c6_Tie.java:206)
	>>	 at com.xx.xxxx.common.service.ejb._EJSRemoteStatelesscom_xx_xxxxxx_common_service_e_d15d50c6_Tie._invoke(_EJSRemoteStatelesscom_xx_xxxxx_common_service_e_d15d50c6_Tie.java:127)
	>>	 at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:622)
	>>	 at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:475)
	>>	 at com.ibm.rmi.iiop.ORB.process(ORB.java:513)
	>>	 at com.ibm.CORBA.iiop.ORB.process(ORB.java:1574)
	>>	 at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2841)
	>>	 at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2714)
	>>	 at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:63)
	>>	 at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
	>>	 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1563)
	>> SERVER (id=4773e3aa, host=zmt400) TRACE END.

 

 

当然第一反应是应用写的有问题,ejb里面有内存泄露或者threadpool开太大,后来检查未发现异常。

 

收集CORE文件和HEAPDUMP文件分析,上PP。

 

core文件分析如下:

 

1TISIGINFO     Dump Event "systhrow" (00040000) Detail "java/lang/OutOfMemoryError" received 
......
......
......
1XMCURTHDINFO  Current Thread Details
NULL           ----------------------
3XMTHREADINFO      "ORB.thread.pool : 0" TID:0x0000000001ECF600, j9thread_t:0x0000000011EA3360, state:R, prio=5
3XMTHREADINFO1            (native thread ID:0x5C7C, native priority:0x5, native policy:UNKNOWN)
4XESTACKTRACE          at com/ibm/rmi/iiop/CDRReader.readBytesForString(CDRReader.java:2279)
4XESTACKTRACE          at com/ibm/rmi/iiop/CDRReader.readStringOrIndirection(CDRReader.java:472)
4XESTACKTRACE          at com/ibm/rmi/iiop/CDRReader.read_codebase_URL(CDRReader.java:2852)
4XESTACKTRACE          at com/ibm/rmi/iiop/CDRReader.fast_read_value(CDRReader.java:1893)
4XESTACKTRACE          at com/ibm/rmi/iiop/CDRReader.read_value(CDRReader.java:2000)
4XESTACKTRACE          at com/xx/xxxxxx/common/service/ejb/_EJSRemoteStatelesscom_xx_xxxxxx_common_service_e_d15d50c6_Tie.loginIn__com_xx_xxxx_privilege_UserInfoInterface__CORBA_WStringValue__CORBA_WStringValue__long__long_long__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue__CORBA_WStringValue(_EJSRemoteStatelesscom_xx_xxxxx_common_service_e_d15d50c6_Tie.java:206)
4XESTACKTRACE          at com/xx/xxxxxx/common/service/ejb/_EJSRemoteStatelesscom_xx_xxxxx_common_service_e_d15d50c6_Tie._invoke(_EJSRemoteStatelesscom_xx_xxxxxx_common_service_e_d15d50c6_Tie.java:127)
4XESTACKTRACE          at com/ibm/CORBA/iiop/ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:622)
4XESTACKTRACE          at com/ibm/CORBA/iiop/ServerDelegate.dispatch(ServerDelegate.java:475)
4XESTACKTRACE          at com/ibm/rmi/iiop/ORB.process(ORB.java:504)
4XESTACKTRACE          at com/ibm/CORBA/iiop/ORB.process(ORB.java:1571)
4XESTACKTRACE          at com/ibm/rmi/iiop/Connection.respondTo(Connection.java:2771)
4XESTACKTRACE          at com/ibm/rmi/iiop/Connection.doWork(Connection.java:2640)
4XESTACKTRACE          at com/ibm/rmi/iiop/WorkUnitImpl.doWork(WorkUnitImpl.java:63)
4XESTACKTRACE          at com/ibm/ejs/oa/pool/PooledThread.run(ThreadPool.java:118)
4XESTACKTRACE          at com/ibm/ws/util/ThreadPool$Worker.run(ThreadPool.java:1527)

 

 

 heapdump分析如下:

 



 

发现CORE文件里面很奇怪,Free Java Heap 有2,104,902,904,98%空闲,但是在内存段分析中,Object即heap占用2,147,483,648 100%占用,heapdump里面分析占用heap内存42,565,544,和core文件的第一种说法匹配,即98% free,排除应用占用内存的可能。

 

分析了下出错的代码行 com.ibm.rmi.iiop.CDRReader.readBytesForString,发现是由web端调用ejb的时候,从ejb容器传递ejb stud的时候出现问题,好,那就避开这个,我将应用发布到同一个server上,这样ejb应该优化为本地调用,验证成功。

 

那为了解决分布式调用的问题,我还要想一个办法,让系统在分布式情况下也不用传递ejb stud,这让我想到了早期中间件需要手动打stud然后引入web容器的事情,查了下infocenter,找到{WAS_HOME}\bin\ejbdeploy.sh命令。

 

ejbdeploy tytim.ear . tytim_stub.ear

 

会在当前目录产生tytim_stub.ear,将这个ear中的ejb相关jar覆盖到.war里面的lib中,问题解决。

 

已联系IBM技术人员,看看是什么原因导致ejb stud传递的时候byte数组长度出现异常,等有了回复,在补充上来。

 

 

转载请注明原始地址: http://boriszhang78.iteye.com/blog/935439

 

 

  • 大小: 23.4 KB
  • 大小: 64.9 KB
分享到:
评论
2 楼 boriszhang78 2011-06-12  
不是测试用例,是解决工程现场故障的时候发现的
1 楼 qingkangxu 2011-04-20  
楼主,如果你的应用是自己测试用的话,能分享一下你的测试用例吗?
1,EJB是怎么写的
2,Web端调用怎么做的?

大概的压力说多少?

方面的话,希望得到你的测试用例。

相关推荐

    EJB 3.0 在 WAS V7 上开发部署的最佳实践

    本文旨在分享在WAS V7上使用EJB 3.0开发和部署应用的一些关键最佳实践,以帮助开发者避免常见问题,提升项目质量和效率。 首先,为了保持代码的模块化和可重用性,建议在创建工程时,将EJB客户端接口和业务对象...

    jboss7ejb配置文件

    在JBoss 7及以上版本中,对EJB的配置过程相较于之前的版本有所变化,主要涉及到两个关键的配置文件:`jboss-ejb3.xml`和`ejb-jar.xml`。 `ejb-jar.xml`文件是EJB模块的标准配置文件,遵循Java EE规范。在这个文件中...

    jboss7 + EJB3

    【JBOSS7 + EJB3详解】 JBOSS7是Red Hat公司开发的一款开源Java应用服务器,它基于Java EE 6(Enterprise JavaBeans 3.1)规范,提供了全面的中间件服务,包括Servlet、JSP、JSF、EJB、JMS等。EJB3是Java EE平台中...

    RSA7.5 下一个EJB3例子,WAS 7.0 + ORACLE10g

    一个EJB3的例子,原来的例子是Jarek Miszczyk 所作, 他用的是DB2数据库,这台机器上没安,所以就改造一下用在Oracle10g上了,有多对多关系映射,EJB3比hibernate好,我的感觉,而且是正宗名门。 压缩包有三个工程...

    实战EJB 实战EJB 实战EJB

    ### 实战EJB知识点解析 #### 一、企业JavaBeans (EJB) 技术概览 **什么是企业JavaBeans技术?** 企业JavaBeans (EJB) 是Java平台上的服务器端组件模型,专为构建可扩展、可靠且跨平台的企业级应用程序而设计。...

    EJB方面 ejb pdf

    ### EJB技术详解 #### EJB 2.0与EJB 1.1的主要区别及其应用场景 EJB(Enterprise JavaBeans)技术自1998年首次推出以来,经历了多个版本的演进,其中EJB 2.0是EJB 1.1的重要升级版,带来了诸多改进和新特性,旨在...

    WAS7 WebSphere7 集群搭建

    WebSphere 7是WAS的一个关键版本,它提供了对Java EE 5规范的支持,包括EJB 3.0、JSF 1.2、JPA 1.0等,同时强化了安全管理、性能优化和诊断工具。集群功能是其重要特性之一,能够帮助企业在多台服务器之间分配工作...

    javax.ejb.jar下载

    Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax....

    jboss7下ejb3实例

    jboss7下的ejb3开发的实例,从jboss官方文档中的代码示例中拷贝到本地工程中,亲测可用,附件是完整的工程。包括一个stateless session和一个stateful session,包括测试客户端。

    Tomcat支持EJB的插件openejb

    目前Tomcat并不直接支持EJB,但可借助openejb插件来间接能够支持EJB

    java的ejb.jar包

    javax.ejb.AccessLocalException.class javax.ejb.CreateException.class javax.ejb.DuplicateKeyException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb....

    实战角度比较EJB2和EJB3的架构异同

    【实战角度比较EJB2和EJB3的架构异同】 EJB,即Enterprise JavaBeans,是Java EE(企业版Java)平台的核心组件之一,用于构建可复用、分布式的服务器端应用程序。EJB2和EJB3是EJB技术的两个主要版本,它们在架构上...

    使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x)

    在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...

    javax.ejb.rar

    META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.properties META-INF / maven / org.glassfish.main.ejb / javax.ejb / pom.xml javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout....

    ejb2.0与ejb3.0的区别

    ### EJB2.0与EJB3.0的主要区别 #### 一、简介 企业Java Beans(EJB)是Java平台为企业级应用提供的一种组件模型。随着技术的发展,EJB经历了多个版本的迭代,其中EJB 2.0和EJB 3.0是两个重要的里程碑版本。本文将...

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    Jboss 7 + EJB 3.0 + Eclipse环境配置

    EJB中ejb-jar——xml文件说明.pdf

    EJB中ejb-jar文件配置详解 EJB(Enterprise JavaBean)是一种Java技术,用于开发企业级应用程序。EJB容器提供了许多功能,如事务处理、安全认证、资源管理等,以便开发者更方便地开发企业级应用程序。在EJB中,ejb-...

    EJB3.0规范-EJB3.0 SPECIFICATION

    7. **依赖注入(Dependency Injection, DI)**:EJB3.0引入了JSR-299(后来成为CDI,Contexts and Dependency Injection)的早期形式,允许通过`@Inject`注解实现依赖的自动装配。 8. **查询语言(JPQL)**:Java ...

    EJB集群EJB集群资料

    EJB集群是EJB技术的一个重要特性,它允许EJB容器(如JBOSS)在多台服务器上分布和复制EJB实例,以实现高可用性和负载均衡。 在给定的示例中,我们看到一个简单的无状态会话Bean(Stateless Session Bean)`...

Global site tag (gtag.js) - Google Analytics