Cordys处理器内存溢出优化分析

Cordys处理器内存溢出优化分析

经过CORDYS和集成公司的共同努力,Apptoolkit Workflow处理器内存溢出的根本原因已经定位,确认为 应用代码问题。
对于修改Processor参数、修改系统全局参数、增加BPM处理器等措施,均不能从根本上解决此问题。
 
因此,必须优化应用代码。印度工程师已经提供了如下资料供参考。
1) https://wiki.cordys.com/display/dsc/NOM+for+JAVA+Programmers
2) https://wiki.cordys.com/display/ctt/Nom+memory+clearing
3) https://wiki.cordys.com/display/dsc/Detecting+NOM+memory+leaks+with+JMX+Viewer
4) https://wiki.cordys.com/display/dsc/Finding+NOM+memory+leaks
以上资料均可从Cordys wiki上获得。
 
在优化过程中,需要特别注意以下几点:
1)尽量少创建NOM对象。
2)使用静态com.eibus.xml.nom.Document对象,不在方法中创建。创建时不使用new  Document(),应使用BSF._getXMLDocument()获得。
3)不使用com.eibus.xml.nom.Find类解析xml,应使用com.eibus.xml.xpath.XPath类,XPath的API请参考 https://wiki.cordys.com/display/dsc/NOM+XPath+Best+Practices
 
另,在目前的代码中发现了很多如下语句:
System.out.println("error");
e.getStackTrace();
应删除或改为记录日志,并请避免在控制台不可用时还向控制台输出。
 
附件中是XPath示例。
FYI.
 
另,在优化代码过程中注意以下场景:
int node_1 = BSF.getXMLDocument().parseString(...); //node_1为根节点
int node_2 = XPath.getFirstMatch(...,...,node_1);//node_2为子节点
此时,只需删除根节点node_1即可,
if(node_1!=0){
Node.delete(node_1);
node_1=0;
}
在根节点删除的同时,子节点会一起删掉。

对于优化结果,需要使用监控工具:jvisualvm,进行监控内容使用情况。配合压力测试效果更好。
推荐文件给你 "Thread_dump_collection_using_Visual_VM.pdf" http://vdisk.weibo.com/s/JEm4w

你可能感兴趣的:(Cordys处理器内存溢出优化分析)