2017-12-26 24 views
0

저는 ruleApp를 만들고이를 Rule Execution 서버에 배포하고 있습니다. 규칙을 실행하는 동안 OutOfMemory 오류가 발생하기 시작합니다. 내가 규칙의 각 인쇄 문을 사용하고WODM (JRULES)을 실행하는 동안 메모리 문제가 발생했습니다.

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 

, 그래서 오류가 인쇄 문이 내 응용 프로그램의 힙 메모리를 채우는 의미한다. 또한 오류 메시지는 룰 세트의 특정 패키지를 표시합니다. 해당 패키지에서만 print 문을 제거하면이 문제가 해결됩니다.

답변

0

Java 힙이 너무 작아서 앱을 실행할 수 없지만이 오류의 일반적인 원인은 규칙에서 무한 루프입니다. 사용자 (또는 관리자)는 WebSphere 구성 옵션이 적절한 힙 크기를 지정하는지 확인할 수 있습니다.

또 다른 가능성은 다른 응용 프로그램이 모든 힙 공간을 사용하고 있다는 것입니다. 현재 조직에서는 매주 dev 서버를 다시 시작해야만 아직 발견되지 않은 메모리 누수에서 힙 공간을 복원해야합니다. 이 경우 규칙은 정상적으로 실행되지만 RES의 Decision Warehouse에서 (큰) 결정 추적을 볼 때 때때로 힙 공간 오류가 발생합니다.