2

我正在使用在 Web 逻辑环境中运行的 commonJ 工作管理器。

我的设置如下:

我的春季应用程序上下文

<bean id="workManagerTaskExecutor"
   class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
    <property name="workManagerName" value="java:comp/env/wm/UVWorkManager" />
</bean>

我在 WEB-INF 中的 web.xml 文件

<resource-ref>
    <res-ref-name>wm/UVWorkManager</res-ref-name>
    <res-type>commonj.work.WorkManager</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

和我在 WEB-INF 中的 weblogic.xml 文件

<work-manager>
    <name>wm/UVWorkManager</name>
    <min-threads-constraint>
        <name>min threads</name>
        <count>30</count>
    </min-threads-constraint>
    <max-threads-constraint>
        <name>max threads</name>
        <count>200</count>
    </max-threads-constraint>
    <capacity>
        <name>max capacity</name>
        <count>20</count>
    </capacity>
    <work-manager-shutdown-trigger>
        <max-stuck-thread-time>600</max-stuck-thread-time>
        <stuck-thread-count>100</stuck-thread-count>
    </work-manager-shutdown-trigger>
</work-manager>

一段时间后,从 SOAP-UI 调用服务。我收到以下错误

commonj.work.WorkException: commonj.work.WorkRejectedException: [WorkManager:002912]OverloadManager max capacity rejected request as current length 20 exceeds max capacity of 20

我知道设置为最大值将被拒绝,但为什么不回收这些线程?即使我等待 15 分钟,我也无法提交新请求。我必须重新启动服务。

4

1 回答 1

0

容量包括来自受限工作集的所有请求、排队或执行。要验证线程的状态,请执行 JVM 的线程转储。

您应该设置 JVM 标志 -Dweblogic.StuckThreadHandling=true 以在生成热转储时将 WorkManager 的名称附加到日志文件中。

kill -3 JVM_PID
于 2014-10-02T18:11:52.210 回答