带有APR的Tomcat导致线程阻塞

时间:2016-02-03 12:43:56

标签: java multithreading tomcat native apr

我的Tomcat环境使用APR(Apache Portable Runtime)监听器:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

我正在使用下面的连接器,我假设它是阻塞类型:

<Connector port="8080" protocol="HTTP/1.1" 
           maxThreads="150" connectionTimeout="20000"      redirectPort="8443" />

在我的一个webapp中,我正在运行一个dll作为Java Process来验证一些数据。只要需要,就可以将此dll作为进程访问。如果不使用几分钟,我有单独的Thread来终止此进程。

现在我面临着一个问题,即使用Apache Tomcat 6.0.43(64位和32位),启动此过程的http线程会被卡住。从线程转储我得到这个堆栈跟踪:

"http-8080-2" - Thread t@55
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
    - locked <1559b4d1> (a java.io.BufferedInputStream)
    at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)
    at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
    at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1118)

为了确定本机进程没有导致问题,我运行了一些具有相同结果的其他外部exe。

在我的研究中,我发现如果我从server.xml中评论上面列出的AprListener属性,事情就会开始起作用。 在不同版本的Tomcat中,此行为非常不一致,例如,在Tomcat 6.0.10中,我没有遇到这个问题。然后我升级到Tomcat 8,我遇到了这个问题。我已尝试过许多版本的Tomcat,并且所有版本都处于相同的行为状态。

那么,这个APR会干扰我自己的进程调用吗?或者有什么我想念的东西。任何看过任何这样的tomcat错误或修复的人都可以指出我。

0 个答案:

没有答案