GC 时间长的流口水
drools with high GC time
就我而言,我想使用 drools 将实时流(来自 kafka)消息作为事实处理。
在准备工作中,我使用以下代码和 jvm params(-Xms1500m -Xmx1500m -Xmn500m, jdk 1.8):
[code sample : simulate continuous facts with while method][1]
测试结果为(应用运行超过24小时):
jconsole monitor
从监视器上看,我发现GC太高了,我猜这个事实位于工作内存中并有引用,所以在主要GC收集之前无法释放。
有什么方法可以显式释放事实吗?或者我怎样才能降低 GC 集合(主要 GC)?
如果您的事实是事件,您可以利用 Drools' expiration policies 事件自动从会话中删除您的事实。
否则,您的会话会越来越大。 Drools 需要将所有事实都存储在内存中才能工作。您可以通过以下选项之一从会话中手动撤回事实:
- 从规则的右侧开始使用 delete(fact)。
- 从您的应用程序使用 kSession.delete(factHandle)。
希望对您有所帮助,
就我而言,我想使用 drools 将实时流(来自 kafka)消息作为事实处理。
在准备工作中,我使用以下代码和 jvm params(-Xms1500m -Xmx1500m -Xmn500m, jdk 1.8):
[code sample : simulate continuous facts with while method][1]
测试结果为(应用运行超过24小时):
jconsole monitor
从监视器上看,我发现GC太高了,我猜这个事实位于工作内存中并有引用,所以在主要GC收集之前无法释放。
有什么方法可以显式释放事实吗?或者我怎样才能降低 GC 集合(主要 GC)?
如果您的事实是事件,您可以利用 Drools' expiration policies 事件自动从会话中删除您的事实。
否则,您的会话会越来越大。 Drools 需要将所有事实都存储在内存中才能工作。您可以通过以下选项之一从会话中手动撤回事实:
- 从规则的右侧开始使用 delete(fact)。
- 从您的应用程序使用 kSession.delete(factHandle)。
希望对您有所帮助,