在JMeter性能测试下发生Activiti死锁

时间:2011-07-12 10:07:09

标签: spring concurrency deadlock jmeter activiti

我遇到了 activiti concurrency 的问题。我们有一个 wicket spring应用程序,带有嵌入式activiti工作流引擎。没有并发用户,它可以正常工作,但在 jmeter性能测试 activiti 在其自己的表上创建死锁期间。例如:ACT_RU_JOB,ACT_RU_EXECUTION,ACT_RU_VARIABLE。我在activiti论坛上找到了一个关于这个问题的主题(Activiti Forum)。他们建议使用队列来启动活动进程。这个解决方案没有解决问题,因为死锁仍然存在。我为你提供了一些配置和堆栈跟踪。所有答案对我都有用。谢谢你的帮助!

我的活动配置:

<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)

2 个答案:

答案 0 :(得分:1)

我从我的活动图中删除了所有计时器,并且死锁消失了。我不知道为什么,但它确实有效。

答案 1 :(得分:0)

执行jmeter测试时,我也遇到了死锁问题。

就我而言,问题是我的DataSource池最多有10个连接 但有100个线程访问api,创建一个需要创建异步任务的流程实例。

因此,如果activiti使用另一个连接(不同于创建流程实例的连接)来创建异步任务,则在返回创建流程实例的连接之前,可能会出现死锁等待连接的可能性(如果所有活动连接都用于创建流程实例)

当我将池大小设置为大于jmeter线程数时,问题已经消失。

- 我的activiti版本是5.19.0

相关问题