我的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错误或修复的人都可以指出我。