javax.ejb.EJBException: JBAS014516: не удалось получить разрешение в течение 5 МИНУТ — невозможно воспроизвести в тестовом регионе с помощью средства загрузки

У нас возникла проблема при открытии документа несколькими пользователями одновременно. [См. трассировку ниже]

    ERROR [org.jboss.as.ejb3.invocation] (http-/xx.xx.xx.xxx:xxxx-xxx) JBAS014134: EJB Invocation failed on component xxxxxx for method public abstract java.lang.String com.xxxxxxx.xxx.ejb.services.encryptionfile.xxxxxx.xxxxxx(java.lang.String): javax.ejb.EJBException: JBAS014516: Failed to acquire a permit within 5 MINUTES
    at org.jboss.as.ejb3.pool.strictmax.StrictMaxPool.get(StrictMaxPool.java:109) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:47) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:278) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:330) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:242) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1]
    at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.5.4.Final-redhat-4.jar:7.5.4.Final-redhat-4]

Я попытался воспроизвести ошибку в области производительности. Первоначально у меня возникла проблема с пространством кучи Java, которая позже была решена путем увеличения размера кучи в конфигурационном файле Jboss.

Однако мне не удалось воспроизвести фактическую ошибку продукта в тестовом регионе с помощью Load runner [150 одновременных обращений пользователей].

  1. Кто-нибудь знает: «Как мы воспроизводим эту ошибку в тестовом регионе с помощью Load runner.

  2. Эта ошибка возникает, когда настроенный пул EJB исчерпан - это означает, что все EJB в настоящее время «используются» (= обрабатываются), знает ли кто-нибудь, как мы проверяем размер пула EJB или bean-компонент, чтобы мы могли воспроизвести проблему.

Дайте мне знать, если требуется дополнительная информация о сценарии и ошибке?

Спасибо, перфтест


person perftester    schedule 26.05.2017    source источник


Ответы (2)


Чтобы отслеживать пул EJB, включите статистику пула с помощью CLI.

/subsystem=ejb3:write-attribute(name=enable-statistics, value=true)

а затем запустите команду ниже

/deployment=xxxx.ear/subdeployment=xx-ejb.jar/subsystem=ejb3/stateless-session-bean=HelloBean:read-resource(include-runtime=true)

Чтобы решить эту проблему, вам нужно увеличить max-pool-size,

strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/>

person Varsha    schedule 26.05.2017

Проблема устранена путем увеличения значения основного потока в файле сервера.

    <short-running-threads>
    <core-threads count="150"/>
    <queue-length count="150"/>
    <max-threads count="150"/>
    <keep-alive-time time="10" unit="seconds"/>
    </short-running-threads>
    <long-running-threads>
    <core-threads count="150"/>
    <queue-length count="150"/>
    <max-threads count="150"/>
    <keep alive-time time="10" unit="seconds"/>
    </long-running-threads>

Увеличено значение с 50 до 150

person perftester    schedule 12.06.2017
comment
В зависимости от конкретной ситуации это может решить проблему (хотя это скорее max-threads, чем core-threads). Но в других случаях именно эта мера может и ухудшить ситуацию. Первый верен, если bean-компоненты заняты, потому что они ожидают потока в пуле. Но увеличение количества потоков, которые запрашивают bean-компонент из пула, совершенно бесполезно. - person R2C2; 10.09.2019