[rules-users] RES: Drools locking threads

Nelio Alves Pereira Filho npereira at cielo.com.br
Mon Jan 28 08:26:20 EST 2013


Hello Stephen

Your suggestion improved a lot the performance, but after a while the application still started to execute poorly.

After more analysis, we identified that there was a memory leak behavior in Drools 5.2. I upgraded to the 5.5 version and the performance now is fantastic.

Tks


De: rules-users-bounces at lists.jboss.org [mailto:rules-users-bounces at lists.jboss.org] Em nome de Stephen Masters
Enviada em: terça-feira, 22 de janeiro de 2013 15:57
Para: Rules Users List
Assunto: Re: [rules-users] Drools locking threads

Hi there,

If I understand correctly, you're creating the stateless knowledge session once and then providing access to execute it from multiple threads. That's not going to work too well ... especially on 5.2. For each request using a stateless knowledge session you should call kbase.newStatelessKnowledgeSession()

i.e. Create the knowledge base once, but create a session for each request.

Steve


On 22 Jan 2013, at 15:14, nalvesp <npereira at cielo.com.br<mailto:npereira at cielo.com.br>> wrote:


I need some support with Drools. I'm using Drools 5.2 in a multi-threaded
environment. Basicaly, every login into a website is calling an execute
method in a StatelessKnowledgeSession. After some time, threads start to
lock as below:

"[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default
(self-tuning)'" id=18 idx=0xc0 tid=7267 prio=5 alive, in native, blocked,
daemon
   -- Blocked trying to get lock:
org/drools/event/RuleBaseEventSupport at 0x2aab52d6f518[fat lock]
   at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method)
   at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1679)[optimized]
   at jrockit/vm/Locks.lockFat(Locks.java:1780)[optimized]
   at
jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1312)[optimized]
   at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1259)[optimized]
   at
org/drools/event/AbstractEventSupport.addEventListener(AbstractEventSupport.java:65)[inlined]
   at
org/drools/common/AbstractRuleBase.addEventListener(AbstractRuleBase.java:1018)[optimized]
   at
org/drools/impl/KnowledgeBaseImpl.addEventListener(KnowledgeBaseImpl.java:127)[optimized]
   at
org/jbpm/process/instance/ProcessRuntimeImpl.initProcessEventListeners(ProcessRuntimeImpl.java:201)
   at
org/jbpm/process/instance/ProcessRuntimeImpl.<init>(ProcessRuntimeImpl.java:68)[optimized]
   at
org/jbpm/process/instance/ProcessRuntimeFactoryServiceImpl.newProcessRuntime(ProcessRuntimeFactoryServiceImpl.java:10)
   at
org/jbpm/process/instance/ProcessRuntimeFactoryServiceImpl.newProcessRuntime(ProcessRuntimeFactoryServiceImpl.java:6)
   at
org/drools/runtime/process/ProcessRuntimeFactory.newProcessRuntime(ProcessRuntimeFactory.java:12)
   at
org/drools/common/AbstractWorkingMemory.createProcessRuntime(AbstractWorkingMemory.java:359)[inlined]
   at
org/drools/common/AbstractWorkingMemory.setKnowledgeRuntime(AbstractWorkingMemory.java:1260)[inlined]
   at
org/drools/impl/StatefulKnowledgeSessionImpl.<init>(StatefulKnowledgeSessionImpl.java:116)[inlined]
   at
org/drools/impl/StatelessKnowledgeSessionImpl.newWorkingMemory(StatelessKnowledgeSessionImpl.java:129)[inlined]
   at
org/drools/impl/StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:293)[optimized]
   at
br/com/cielo/engineRules/services/impl/CancelamentoRuleBean.validarRegrasCancelamento(CancelamentoRuleBean.java:79)[optimized]
   at
br/com/cielo/engineRules/services/impl/CancelamentoRuleEJB_vyscvn_EOImpl.validarRegrasCancelamento(CancelamentoRuleEJB_vyscvn_EOImpl.java:205)[optimized]
   at
br/com/cielo/engineRules/services/impl/CancelamentoRuleEJB_vyscvn_EOImpl_WLSkel.invoke(ILweblogic/rmi/spi/InboundRequest;Lweblogic/rmi/spi/OutboundResponse;Ljava/lang/Object;)Lweblogic/rmi/spi/OutboundResponse;(Unknown
Source)[optimized]
   at
weblogic/rmi/internal/BasicServerRef.invoke(BasicServerRef.java:589)[optimized]
   at
weblogic/rmi/cluster/ClusterableServerRef.invoke(ClusterableServerRef.java:230)[optimized]
   at
weblogic/rmi/internal/BasicServerRef$1.run(BasicServerRef.java:477)[inlined]
   at
weblogic/security/acl/internal/AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)[inlined]
   at
weblogic/security/service/SecurityManager.runAs(Lweblogic/security/acl/internal/AuthenticatedSubject;Lweblogic/security/acl/internal/AuthenticatedSubject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;(Unknown
Source)[inlined]
   at
weblogic/rmi/internal/BasicServerRef.handleRequest(BasicServerRef.java:473)[inlined]
   at
weblogic/rmi/internal/wls/WLSExecuteRequest.run(WLSExecuteRequest.java:118)[optimized]
   at
weblogic/work/ExecuteThread.execute(ExecuteThread.java:201)[optimized]
   at weblogic/work/ExecuteThread.run(ExecuteThread.java:173)
   at jrockit/vm/RNI.c2java(JJJJJ)V(Native Method)
   -- end of trace

I went to Drool's source code and there's a synchronized section right
before the lock. I'm afraid Drools doesn't support multi-thread processing.

Does anyone know anything about this issue???

Tks




--
View this message in context: http://drools.46999.n3.nabble.com/Drools-locking-threads-tp4021732.html
Sent from the Drools: User forum mailing list archive at Nabble.com<http://Nabble.com>.
_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org<mailto:rules-users at lists.jboss.org>
https://lists.jboss.org/mailman/listinfo/rules-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20130128/ba5c1a7b/attachment-0001.html 


More information about the rules-users mailing list