Проблема с памятью при запуске WODM (JRULES)

Я создаю ruleApp и развертываю его на сервере выполнения правил. При выполнении правил начинает выдавать ошибку OutOfMemory.

000000bd execution     E   The interaction ruleEngine.execute has failed.
                                 com.ibm.rules.res.xu.internal.LocalizedResourceException: GBRXU0001E: The interaction ruleEngine.execute has failed.
        at com.ibm.rules.res.xu.client.internal.jca.XUInteraction.execute(XUInteraction.java:302)
        at com.ibm.rules.res.xu.client.internal.XUSession.executeOperation(XUSession.java:171)
        at com.ibm.rules.res.xu.client.internal.XURuleEngineSession.execute(XURuleEngineSession.java:603)
        at ilog.rules.res.session.impl.IlrStatefulSessionBase.execute(IlrStatefulSessionBase.java:725)
        at ilog.rules.res.session.impl.IlrStatefulSessionBase.execute(IlrStatefulSessionBase.java:714)
        at ilog.rules.res.session.impl.IlrStatefulSessionBase.execute(IlrStatefulSessionBase.java:625)
        at ilog.rules.res.session.impl.IlrStatefulSessionBase.execute(IlrStatefulSessionBase.java:269)
        at ilog.rules.res.session.impl.IlrStatefulSessionBase.execute(IlrStatefulSessionBase.java:241)
        at ilog.rules.res.session.impl.IlrStatelessSessionBase.execute(IlrStatelessSessionBase.java:63)
        at com.bnsf.rules.services.framework.RuleExecutioner.invokeRuleService(RuTioner.java:50)
        at com.bnsf.rules.services.framework.RuleExecutioner.invokeSimpleRuleService(RuTioner.java:24)
        at com.bnsf.rules.services.MiscBillingRuleService.execBatch(Miservice.java:222)
        at com.bnsf.rules.services.MiscBillingRuleService.performTask(MisService.java:158)
        at com.bnsf.rules.services.MiscBillingRuleService.execute(MisService.java:88)
        at com.bnsf.rules.services.MiscBillingRuleServiceThread.run(MisThread.java:60)
Caused by: java.lang.OutOfMemoryError: Java heap space
        at java.lang.StringBuffer.ensureCapacityImpl(StringBuffer.java:338)
        at java.lang.StringBuffer.append(StringBuffer.java:204)
        at java.io.StringWriter.write(StringWriter.java:113)
        at java.io.StringWriter.append(StringWriter.java:155)
        at com.ibm.rules.res.xu.engine.de.internal.DEManager.note(DEManager.java:554)
        at com.ibm.rules.engine.runtime.impl.EngineObserverManager.note(EngineObserverManager.java:84)
        at com.ibm.rules.engine.rete.runtime.AbstractReteEngine.note(AbstractReteEngine.java:686)
       at com.ibm.rules.generated.EngineDataClass.ilog_rules_brl_System_printMessage_java_lang_String(Unknown Source)
        at com.ibm.rules.generated.ruleflow.Service$0020Definition.IntermediateDefnFlow$003eIntermediate$0020Event$0020Definition.BodyExecEnv.executeIntermediate$0020Events$0020For$0020Intra$002dplant$0020Switch$002dEndEventBody3(Unknown Source)
        at com.ibm.rules.generated.ruleflow.Service$0020Definition.IntermediateDefnFlow$003eIntermediate$0020Event$0020Definition.BodyExecEnv.executeB

Я использую оператор печати в каждом из правил, поэтому ошибка означает, что оператор печати заполняет динамическую память моего приложения. Кроме того, сообщение об ошибке показывает конкретный пакет в наборе правил. Удаление оператора печати только из этого пакета решит эту проблему.


person user9140475    schedule 26.12.2017    source источник


Ответы (1)


Возможно, куча Java слишком мала для запуска вашего приложения, но типичная причина этой ошибки — бесконечный цикл в правилах. Вы (или администратор) можете убедиться, что параметры конфигурации WebSphere указывают разумный размер кучи.

Другая возможность заключается в том, что какое-то другое приложение использует все пространство кучи — моя текущая организация должна перезапускать свой сервер разработки каждую неделю, чтобы восстановить пространство кучи из-за утечки памяти, которую они еще не обнаружили. В этом случае правила выполняются нормально, но при просмотре (большой) трассировки решения в хранилище решений в RES я иногда получаю сообщение об ошибке нехватки места в куче.

person Greg Hadaller    schedule 02.02.2018