`
javaboy2006
  • 浏览: 187041 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

drools内存泄露问题排查分析

    博客分类:
  • java
阅读更多
    一、现象
    某系统使用了drools规则引擎对用户数据按照规则进行计算,在对其某查询接口连续100W次调用过程中发现JVM内存可用量持续下降,从系统启动时的1.5G下降为20-30M,导致java.lang.OutOfMemoryError: Java heap space只能被迫重启系统。
    二、排查
    根据问题现象初步判定为系统出现内存泄露,但系统中使用了众多变量,如何判断是哪些变量没有被GC及时回收而导致内存泄露的呢?接下来开始寻找JVM内存监控工具。jprofiler是一个不错的选择(不过是收费软件)。找到crack,最初试图在RedHat Enterprise Linux AS release4上安装但是失败。不过可以在本地eclipse上安装jprofiler插件对内存变量进行监控分析。启动本地系统后(-Xms512M -Xmx512M),jprofiler同时启动。对本地服务连续进行10W次调用同时通过jprofiler对变量进行监控发现drools规则引擎中的部分变量占用内存量排名靠前(org.drools.*),通过jprofiler的GC强制回收功能也无法释放内存占用量,内存创建大量实例。当调用数为926次时报java.lang.OutOfMemoryError: Java heap space,内存占用量如下图:



google一下,http://hi.baidu.com/funshare/blog/item/d2f4a8c3006c545db219a84c.html
于是按照上面的解决方案修改drools规则计算部分代码。
修改后第926次调用时jprofiler监控结果如下图:

已经没有drools大量占用内存情况出现了。初步确定了问题原因。
其实jconsole也是一个很好的监控工具,并且由jdk自带。这次使用jconsole对远程服务器上的应用进行监控。
drools计算规则代码修改前3小时时间段内堆内存占用量如下图:

内存占用量呈持续上升趋势。
修改后3小时时间段内堆内存占用量如下图:

可以看到内存占用量比较平稳。堆内存总占用量也有所下降。问题可以得到确认。
    三、经验
    通过解决该问题获得了一些经验教训:
    1、此类问题需要通过工具长时间的持续跟踪才能发现,1小时内通常不容易发现问题。
    2、擅用google。

------------------------------------
GC回收机制的概念和原理:http://rdc.taobao.com/blog/qa/?p=4708
JVM监控工具:http://androider.iteye.com/blog/293814
JProfiler和Eclipse整合:http://hi.baidu.com/dburu/blog/item/c397b644e3fde78ab3b7dc78.html
Jconsole使用:http://rdc.taobao.com/blog/qa/?p=1261
JConsole使用手册:http://hi.baidu.com/xuwanbest/blog/item/3f6d4c7b375ff4f10bd18731.html
利用JProfiler对应用服务器内存泄漏问题诊断一例:http://yufeimen.iteye.com/blog/70721


vi /home/admin/test-run/bin/jbossctl.sh
JAVA_OPTS="$JAVA_OPTS -Dprogram.name=$PROGNAME -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

bash jbossctl.sh stop
bash jbossctl.sh start -b10.253.67.32
  • 大小: 102.5 KB
  • 大小: 89.9 KB
  • 大小: 105.9 KB
  • 大小: 114.7 KB
分享到:
评论

相关推荐

    drools drools drools drools drools

    在实际应用中,drools 可以用于信贷风险评估、保险索赔处理、市场分析等多种场景,通过规则的灵活配置,可以应对业务需求的变化。同时,drools 还支持事件驱动的处理模式,可以应用于复杂事件处理(CEP),检测和...

    drool, 自动内存泄漏检测和分析.zip

    4. **集成到项目**:了解 drool 的使用方法,将其集成到你的应用中,或者作为独立工具定期进行内存分析。 5. **查阅文档**:深入研究项目的 README 文件或其他文档,以理解如何配置和解读 drool 的结果。 通过以上...

    drools flow分析报告

    **Drools Flow 分析报告** **第一章 Drools Flow 简介** Drools Flow 是 Drools 项目的一部分,它提供了一套完整的业务流程管理(BPM)和工作流解决方案。Drools 是一个开源的规则引擎,主要用于决策管理和业务...

    drools7.25中文文档+drools技术指南.zip

    4. **工作内存(Working Memory)**:Drools的工作内存是规则执行的核心。它存储了规则运行时所需的数据和事实,文档会解释如何插入、修改和删除工作内存中的对象。 5. **KieSession与规则执行**:KieSession是...

    Drools

    Drools是一款强大的Java规则引擎,它为业务规则管理提供了高效、灵活且可扩展的解决方案。作为基于模型的决策自动化工具,Drools允许开发者将复杂的业务逻辑编码为一系列易于理解和维护的规则,这些规则可以独立于...

    drools动态生成规则文件

    3. 内存中的规则:除了生成.drl文件,drools还支持在内存中创建规则。这可以通过构建RuleDescr对象并使用KnowledgeBuilder.add()方法添加到规则库中。 四、工作记忆与事实 在drools中,规则的执行依赖于工作记忆...

    drools入门(二)-----规则引擎Drools解决汽水问题

    ** Drools 入门(二) —— 规则引擎 Drools 解决汽水问题** 在本文中,我们将深入探讨 Drools,一个强大的业务规则管理系统,它被广泛应用于各种行业中,包括金融、医疗和制造等。Drools 是一个开源的 Java 规则引擎...

    Drools规则引擎开发实例+源码

    3. **工作内存(Working Memory)**:工作内存是Drools内部的状态存储,包含当前所有活跃的事实。当新的事实被插入或现有事实被修改时,Drools会重新评估所有规则,看是否有规则条件被满足。 4. **规则流程(Rule ...

    DRools BRMS Rule创建问题?

    虽然没有提供具体的压缩包文件内容,但从“DRools_Q&A.doc”这个文件名我们可以推测,这可能是一个文档,包含了对Drools使用过程中常见问题的问答集,可能包括了错误排查、规则编写技巧、性能调优等方面的内容。...

    Drools实例

    总之,Drools实例为我们提供了一个直观的学习平台,通过GOLF和EmployTest,我们可以掌握如何利用Drools解决实际问题,包括逻辑决策和自动化计算。这对于我们理解规则引擎的运作机制,以及在实际项目中应用Drools来...

    kie-drools-wb

    kie-drools-wb是基于Drools工作流平台(Drools Workbench)的核心运行时组件集合。这个压缩包包含了一系列的jar文件,这些文件是Drools工作流环境正常运行所必需的。Drools是一个强大的规则引擎,而Drools Workbench...

    droolsdroolsdrools

    《 Drools 深度探索:实例代码解析与实践指南》 Drools,作为一款强大的规则引擎,广泛应用于业务逻辑复杂、决策流程多变的IT系统中。它基于Java平台,采用领域特定语言(DSL)来编写业务规则,使得业务人员也能...

    Drools规则引擎使用demo

    - **工作内存(Working Memory)**:是Drools运行时环境,存储所有的事实和规则。当新的事实被添加到工作内存时,Drools会自动匹配并执行相关的规则。 - **KieSession**:是与Drools交互的主要接口,负责管理事实...

    帮助网友解决一个drools的问题

    在排查问题时,可以使用Drools Workbench,这是一个Web应用程序,提供了规则编辑、测试和部署的功能。此外,Drools提供了一个命令行工具kie-cmd,可以用来编译、打包和运行规则。对于问题定位,可以利用Drools的...

    Drools开发最全中文版技术指南

    如果你是Java开发者,掌握Drools将极大提升你在处理复杂业务逻辑时的能力,使你能更高效地解决业务问题。 总之,《Drools开发最全中文版技术指南》是一本深入浅出的教程,无论你是初学者还是有一定经验的开发者,都...

    规则引擎Drools.NET移植版

    **规则引擎Drools.NET移植版** Drools是一款强大的业务规则管理系统,源自Java社区,以其灵活、高效和可扩展的特性而广受赞誉。它允许开发者将业务逻辑以规则的形式编写,使得业务规则可以独立于应用程序代码进行...

    Drools规则执行顺序

    标题 "Drools 规则执行顺序" 涉及的是一个业务规则引擎——Drools 的核心概念。Drools 是一个开源的Java...对于大型项目,良好的日志记录和分析是至关重要的,可以帮助定位问题,优化性能,并确保业务逻辑符合预期。

    Drools资料

    ### Drools基础知识与学习资源概览 #### 一、Drools简介 Drools是一个开源的业务规则管理系统(BRMS),它支持业务逻辑的编写、执行和管理。该系统基于专家系统和产生式规则引擎原理,允许用户通过声明式的语言来...

    Drools6 和 Drools7技术指南-中文文档.zip

    Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java

Global site tag (gtag.js) - Google Analytics