java进程宕机生产core,EAS服务器内存溢出、宕机解决方案-Heapdump与JavaCore分析

主要是为了自己学习HeapDump的分析,这是一篇好文章。

EAS服务器内存溢出、宕机解决方案

场景描述: EAS服务器运行一段时间后,客户端与portal登陆时,出现内存溢出的错误。有时甚至出现服务器直接宕机了,管理控制台也启动不了,客户端与portal都连接超时,必须使用EAS自带的stopserver.sh命令去终止服务器再重启。

解决思路:

1、情报收集

内存溢出后,到EAS服务器目录:eas\server\profiles\server*\bin下,看是否有类似:heapdump.20110718.120928.3804.0010.phd和Javacore*.txt的文件生成。(注:默认情况下,如果使用sunjdk内存溢出时是不自动生成此类文件的,只有用ibmjdk才会自动生成。)如果没有找到此类文件,请切换EAS服务器使用ibmjdk,重启服务器后继续观察。(具体切换步骤请看附录2)。

2、分析Heapdump文件和Javacore文件

ØHeap Dump:JVM内存Dump(HeapDump文件)。通过对它的分析可以快速诊断导致内存消耗的原因。Heapdump文件包含了在堆内存中的所有对象,可以理解为系统发生内存溢出(OutOfMemory,即OOM)时堆内存的快照。

ØJavacore:与heapdump对应的线程堆栈信息,一般通过对它的分析可定位到发生内存溢出的功能点。

一般情况下,解析heapdump文件需要64位的jdk,并要求机器内存>=4G。因此一般都需要用客户的测试服务器或服务器上进行解析,普通的PC机完成此项任务。

Ø工具准备好后,可到命令行下启动Heap Analyzer工具。

命令如下:C:\Kingdee7\eas\jdk\bin\java-Xmn512m –Xmx4000m -jar ha414.jar

(如果解析过程中内存溢出,可跟据实际情况调大–Xmx这个参数)

2.1打开HeapDump文件

Heap Analyzer工具打开后,点击以下图标选择打开heapdump文件:

0818b9ca8b590ca3270a3433284dd417.png

1、打开heapdump文件会消耗系统的CPU、内存资源,系统性能会有所下降。建议尽量不在客户正式环境执行!如果实在没有其他机器,正式环境资源充足,且问题比较紧急,可以尝试使用正式环境。打开分析完后及时关闭以释放资源。

2、在打开过程中,出现如下图形,说明工具设置的最大内存不够,不能打开该文件,需采用ibm jdk来设置更大的最大内存来打开

0818b9ca8b590ca3270a3433284dd417.png

名称解释

Root object:没有任何一个对象引用(持有)它

Parent object:对象A引用X,引用Y等(A—>X , A—>Y…),A就是父对象

Child object:对象X被A引用,被B引用等(A—>X , B—>X…),X就是子对象。

Owner object:因为子对象可能被多个父对象引用,但只能为其中一个父对象所有,这个父对象就是Owner object。Total size的计算会涉及到Owner object,这是为了避免重复计算

Size:对象自身的大小(持有该对象的指针在内存中占用的大小)

Total Size:对象自身及子对象的和

功能介绍

1,界面打开后初始状态如下,主要对tree view这个视图进行分析,可最大化这个视图

0818b9ca8b590ca3270a3433284dd417.png

2、tree view中每一行的结构如下:

TotalSize(占用总内存百分比)[对象自身大小]子对象个数对象名称内存地址

0818b9ca8b590ca3270a3433284dd417.png

3、泄漏一般发生在那些拥有“超乎寻常多”的引用(子节点)的class上,正是这些创建后没有释放、累积了成千上百的对象,造成了OutOfMemory。通过“Locate a leak suspect”和“Go to the largest drop in subtrees”可快速定位到子对象多的对象位置。

0818b9ca8b590ca3270a3433284dd417.png

4、通过“show from roots”可以回到根节点

0818b9ca8b590ca3270a3433284dd417.png

5、通过“List same type”可以列出所有在内存中和该对象相同类型的对象。

0818b9ca8b590ca3270a3433284dd417.png

附录1:

示例1

选中占比最大的那个对象,右键选择“Locate a leak suspect”:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

或者也可以直接点击“Subpoena Leak Suspect(s)”,然后选择占比最大的对象:

0818b9ca8b590ca3270a3433284dd417.png

可以看到如下:

0818b9ca8b590ca3270a3433284dd417.png

步骤2右键展开上图中LRUMap对象,如下

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

步骤 3对上图中的RowSetSqlDec对象右键点“List same type”,可看到该对象有3001个,共占用了700多M内存:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

示例2(结合javacore文件进行分析)

主要内存占用在如下三个部分

0818b9ca8b590ca3270a3433284dd417.png

展开上述内存占用

0818b9ca8b590ca3270a3433284dd417.png

与调拔入库单相关的对象(分录)占用了2百多兆

0818b9ca8b590ca3270a3433284dd417.png

还是与库存相关的对象(单据头)相关占用1百多兆

0818b9ca8b590ca3270a3433284dd417.png

与调拔入库单相关的对象共占用4百多兆内存,

分析javacore文件(用dump文件中的看到的关键字MoveInWareBill来搜索),摘取的线程堆栈如下:

at java/lang/String.toLowerCase(String.java:1143(Compiled Code))

at com/kingdee/eas/scm/common/app/AbstractSCMBillBaseControllerBean._getCollection(AbstractSCMBillBaseControllerBean.java:181)

at com/kingdee/eas/scm/im/inv/app/AbstractInvBillBaseControllerBean._getCollection(AbstractInvBillBaseControllerBean.java:174)

at com/kingdee/eas/scm/im/inv/app/AbstractMoveInWarehsBillControllerBean._getCollection(AbstractMoveInWarehsBillControllerBean.java:173)

at com/kingdee/eas/scm/im/inv/app/AbstractMoveInWarehsBillControllerBean.getMoveInWarehsBillCollection(AbstractMoveInWarehsBillControllerBean.java:161)

at com/kingdee/bos/transaction/EJBTxFacade/TxInvokerBean_LocalObjectImpl_2.INVOKE_SUPPORTS(Bytecode PC:4(Compiled Code))

at $Proxy591.getCollection(Bytecode PC:22)

at com/kingdee/bos/framework/DynamicObject.invoke(DynamicObject.java:57(Compiled Code))

at com/kingdee/bos/framework/DynamicObject.getCollection(DynamicObject.java:246)

at com/kingdee/eas/base/dap/app/DAPAppTools.execDataFilterMultiEntry(DAPAppTools.java:75(Compiled Code))

at com/kingdee/eas/base/dap/app/DAPTransformerControllerBean._innerTransform(DAPTransformerControllerBean.java:1028)

at com/kingdee/eas/base/dap/app/DAPTransformerControllerBean._transformForBotp(DAPTransformerControllerBean.java:1131)

at com/kingdee/eas/base/dap/app/DAPTransformerControllerBean._transform(DAPTransformerControllerBean.java:813)

at com/kingdee/eas/base/dap/app/DAPTransformerControllerBean._generateVoucher(DAPTransformerControllerBean.java:649)

at com/kingdee/eas/scm/common/app/SCMBillBaseControllerBean._generateVoucher(SCMBillBaseControllerBean.java:1057)

通过线程堆栈可以看出:调拔入库单生成凭证内存占用过大,导致溢出宕机

附录2:如何切换EAS的运行时环境?

在eas\server\profiles\server*\bin目录下,找到set-server-env.bat(sh)文件。将JAVA_HOME变量的值设置为imbjdk的路径。如果找不到JAVA_HOME这个变量,请直接添加。如下图:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
“xx云 eas-”是一种基于云计算技术的边设计、边采购、边生产一体化管控平台。该平台能够将设计、采购和生产等环节统一管理,实现信息的实时共享和流程的无缝衔接,提高生产效率和降低成本。 首先,该平台集成了设计、采购和生产等多个环节的功能模块,通过云计算技术实现数据的共享和协同。设计师可以在平台上进行产品设计和制造流程的优化,采购人员可以根据设计要求进行材料采购,同时生产人员可以根据设计和采购的信息进行生产计划和制造过程的管理。不同环节的人员可以通过平台进行实时交流和协作,提高沟通效率。 其次,该平台还具备供应链管理的功能。通过与供应商的对接,平台可以实时获取供应商的库存和交货期等信息,帮助采购人员进行智能化的供应链管理。通过对供应链的全面管控,可以降低库存成本,减少因物料短缺或过量而导致的生产延误或资源浪费,最大程度地提高生产效率。 此外,该平台还具备数据分析和预测的功能。通过对设计、采购和生产过程的数据进行收集和分析,可以为企业提供数据支持,帮助企业做出更合理的决策。同时,基于历史数据和趋势分析,平台还可以进行生产计划的预测,提醒企业及时调整生产策略,以应对市场的波动和变化。 综上所述,“xx云 eas-”平台是一种针对边设计、边采购、边生产一体化的管控需求而开发的综合性解决方案。通过集成设计、采购和生产等多个环节的功能,实现数据共享和流程协同,提高生产效率和降低成本。同时,借助供应链管理和数据分析的功能,帮助企业做出更合理的决策和预测,提升企业竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值