Spring 在JMeter性能测试下发生Activiti死锁
我的activiti并发性有问题。我们有一个带有嵌入式activiti工作流引擎的wicket spring应用程序。在没有并发用户的情况下,它可以正常工作,但在jmeter性能测试期间,activiti会在自己的表上创建死锁。例如:ACT_RU_作业、ACT_RU_执行、ACT_RU_变量。我在activiti论坛上找到了一个关于这个问题的主题()。他们建议使用队列启动activiti流程。这个解决方案没有解决问题,因为死锁仍然在发生。我为您提供一些配置和堆栈跟踪。所有的答案都对我有用。谢谢你的帮助 我的活动配置:Spring 在JMeter性能测试下发生Activiti死锁,spring,concurrency,deadlock,jmeter,activiti,Spring,Concurrency,Deadlock,Jmeter,Activiti,我的activiti并发性有问题。我们有一个带有嵌入式activiti工作流引擎的wicket spring应用程序。在没有并发用户的情况下,它可以正常工作,但在jmeter性能测试期间,activiti会在自己的表上创建死锁。例如:ACT_RU_作业、ACT_RU_执行、ACT_RU_变量。我在activiti论坛上找到了一个关于这个问题的主题()。他们建议使用队列启动activiti流程。这个解决方案没有解决问题,因为死锁仍然在发生。我为您提供一些配置和堆栈跟踪。所有的答案都对我有用。谢谢你
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="databaseType" value="mssql" />
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManagerLugy" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="true" />
<property name="deploymentResources" value="classpath*:/diagrams/idm/*.bpmn20.xml" />
<property name="history" value="none"/>
<property name="jdbcMaxActiveConnections" value="1000"/>
<property name="jdbcMaxIdleConnections" value="10"/>
<property name="jdbcMaxWaitTime" value="50000"/>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
### Error querying database. Cause: org.hibernate.exception.LockAcquisitionException: Transaction (Process ID 67) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
### The error may involve org.activiti.engine.impl.persistence.entity.VariableInstanceEntity.selectVariablesByExecutionId-Inline
### The error occurred while setting parameters
### Cause: org.hibernate.exception.LockAcquisitionException: Transaction (Process ID 67) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at org.springframework.jms.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:471)
at org.springframework.jms.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:355)
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:535)
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:495)
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
at java.lang.Thread.run(Thread.java:662)
我从活动图中删除了所有计时器,死锁消失了。我不知道为什么,但它可以工作。我在执行jmeter测试时也遇到了死锁问题 在我的例子中,问题是我的数据源池最多有10个连接 但是有100个线程访问api来创建需要创建异步任务的流程实例 因此,如果activiti在返回创建流程实例的连接之前使用另一个连接(与创建流程实例的连接不同)创建异步任务,则可能会出现等待连接的死锁(如果所有活动连接都用于创建流程实例) 当我将池大小设置为大于jmeter线程数时,问题就解决了 -- 我的activiti版本是5.19.0