关于使用drools内存溢出问题

       亲爱的读者您好,当你看到这篇文章时,相信你对drools已经有了必定的了解,也已经使用到您的项目中,很荣幸您也遇到了小哥曾经遇到过的问题,嘿嘿,接下来小哥说一下我曾经遇到的问题。spa

小哥的drools运用的比较复杂,由于业务所需,drools能够分为几个模块,小编用到了其中的drools fusion,用这个东西能够作一套cep系统,drools cep相关内容小哥会专门写一篇文章,欢迎读者浏览。小哥用到了一个时间窗口和长度窗口的概念,好比要看最近十分钟的数据,最近10条数据,因此要求数据常驻内存,因此小哥在设计时,就没释放资源,只建立了一个KieSession,一个会话,是全局的。刚开始小哥为了不内存溢出,给每一个插入drools内存的fact设置了过时时间,好比三分钟,三分钟后就会自动从会话移除,并释放相关资源,可是项目在线上运行了一段时间后,发生了内存溢出的现象,小哥通过仔细的内存分析,发现是drools致使的,过时机制不生效,过时时间到后,还有一些资源没释放,好比引用句柄。最终小哥从新拟定了技术方案,完美的解决了此问题。小哥的策略是,定时释放内存,也就是定时从新建立会话,释放以前的会话,因为小哥业务的特殊性,只能这样。设计

固然,也有人业务没那么特殊,可能也会遇到内存溢出的可能,小哥只说两点,若是你的数据在内存使用一次,就不使用了,那么insert完后必定要调用delete方法,再调用dispose方法,如图所示:blog


第二点,当规则改变时若是须要从新建立会话,记得把以前会话资源释放,调用dispose便可。内存

若是有问题,或看不懂的地方,欢迎联系小哥或者加群一块儿讨论资源

扫码加小哥qqio


扫码加qq交流群引用