4

activitiの同時実行性に問題があります。アクティビティワークフローエンジンが組み込まれ改札スプリングアプリケーションがあります。同時ユーザーがいなくても正常に動作しますが、jmeterパフォーマンステスト中に、アクティビティによって独自のテーブルにデッドロックが発生します。例: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)
4

2 に答える 2

1

アクティビティ図からすべてのタイマーを削除すると、デッドロックが解消されました。理由はわかりませんが、機能します。

于 2011-08-23T09:16:55.930 に答える
0

また、jmeterテストを実行するときにデッドロックの問題が発生しました。

私の場合、問題は、データソースプールが最大10の接続であるが、非同期タスクを作成する必要があるプロセスインスタンスを作成するAPIにアクセスする100のスレッドを持っていたことです。

したがって、activitiが別の接続(プロセスインスタンスを作成するための接続とは異なる)を使用して非同期タスクを作成する場合、プロセスインスタンスを作成する接続を返す前に、接続を待機するデッドロックが発生する可能性があります(すべてのアクティブな接続の場合)プロセスインスタンスの作成に使用されます)

プールサイズをjmeterスレッド数よりも大きく設定すると、問題は解決しました。

-私のアクティビティバージョンは5.19.0です

于 2018-03-19T05:09:14.743 に答える