We are seeing a problem with the Activiti engine hanging in an apparent deadlock.
We have deployed Activiti 5.22.0 in Tomcat, and using C3P0 connection pool. If we set Tomcat thread pool size to be equal to or greater than the connection pool size, the entire system hangs, apparently waiting to get the next id from the DB. Below is the relevant section of the thread dump. Each thread seems to be stuck in the same place.
Any ideas? Should the thread pool always be smaller than the connection pool?
Thanks.
"http-nio-8080-exec-20" #45 daemon prio=5 os_prio=0 tid=0x00007f2b7c020800 nid=0x2694 waiting for monitor entry [0x00007f2bee15c000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.activiti.engine.impl.db.DbIdGenerator.getNextId(DbIdGenerator.java:35)
- waiting to lock <0x00000006c1f952d8> (a org.activiti.engine.impl.db.DbIdGenerator)
at org.activiti.engine.impl.db.DbSqlSession.insert(DbSqlSession.java:151)
at org.activiti.engine.impl.persistence.entity.ExecutionEntity.insert(ExecutionEntity.java:1270)
at org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity.newProcessInstance(ProcessDefinitionEntity.java:146)
at org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl.createProcessInstanceForInitial(ProcessDefinitionImpl.java:63)
at org.activiti.engine.impl.pvm.process.ProcessDefinitionImpl.createProcessInstance(ProcessDefinitionImpl.java:53)
at org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity.createProcessInstance(ProcessDefinitionEntity.java:87)
at org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity.createProcessInstance(ProcessDefinitionEntity.java:135)
at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:99)
at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:37)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:47)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:45)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)
at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:86)
at org.activiti.rest.service.api.runtime.process.ProcessInstanceCollectionResource.createProcessInstance(ProcessInstanceCollectionResource.java:166)
Solved! Go to Solution.
Use the strongUUid generator. It does not utilize the database, is more performant and is a much better option for production environments.
Greg
Thanks for the pointer. Will give it a try.
Ask for and offer help to other Alfresco Process Services and Activiti Users and members of the Alfresco team.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.