在我的Spark Streaming应用程序中,我广播了我的流口水规则,该规则以 org.kie.api.KieBase 对象的形式出现。此接口的具体实现是 org.drools。 core.impl.KnowledgeBaseImpl 。然后,该规则由每个执行者针对某些数据执行。
我具有通过重新广播新对象在特定时间间隔刷新流口水规则的功能,并且我持久存在并销毁了旧的广播变量。在这种情况下, org.drools.core.impl.KnowledgeBaseImpl 对象是从内存中收集的垃圾,但是每次重新广播流口水的对象时,下面的对象都不会释放并增加,我使用jprofiler观察到了这一点,我无法附加屏幕快照,因此给出了一些泄漏的对象。
org.drools.core.definitions.rule.impl.RuleImpl;
org.drools.core.rule.ConsequenceMetaData;
org.drools.core.rule.EvalCondition;
org.drools.core.spi.PatternExtractor;
org.drools.compiler.compiler.io.memory.MemoryFolder;
org.drools.compiler.compiler.io.memory.MemoryPath;
org.drools.compiler.compiler.io.memory.MemoryFile;
org.drools.core.rule.GroupElement;
长期来看,我正面临内存不足的错误。
我们正在使用以下版本的罐子。
kie-api-6.3.0.Final.jar
kie-internal-6.3.0.Final.jar
drools-core-6.3.0.Final.jar
knowledge-api-6.3.0.Final.jar
drools-compiler-6.3.0.Final.jar
预先感谢