multithreading - 几天后Tomcat 7卡住

标签 multithreading tomcat ajp

Tomcat 服务器卡住并完全停止响应。重启似乎是让它重新联机的唯一方法。线程转储显示服务器在 AJP 线程上达到极限。我为 maxThread 设置了默认值 (200),当我的服务器挂起时,我看到恰好有 200 个 AJP 线程处于“RUNNABLE”和“locked on monitor”状态。此问题通常每 3 到 4 天发生一次。服务器负载不重,它每 5 分钟左右处理一个请求。这是某种 ajp 线程泄漏问题吗?

一旦达到 AJP 线程数的最大限制,服务器就无法创建新的 AJP 线程,我可以理解这是预期的行为。但我很难理解的是

  • 当“RUNNABLE”ajp 线程在池中可用时,为什么服务器不断创建新的 AJP 线程来处理新请求?

有没有人遇到过类似的问题?这是 Tomcat 中的已知问题/错误吗?感谢您的帮助!

AJP-Thread 的线程转储片段:(如果有人喜欢看,我可以发布完整的线程转储...请告诉我)

    "ajp-bio-6109-exec-307" daemon prio=10 tid=0x00007f846d3bc800 nid=0x51c9 runnable [0x00007f842e4e3000]
   java.lang.Thread.State: RUNNABLE   
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:316)
    at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:371)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:128)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    - locked <0x00000007b4f6f9a8> (a org.apache.tomcat.util.net.SocketWrapper)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

谢谢

最佳答案

我好像还不能发表评论...

在您的 server.xml 文件中是否设置了 connectionTimeout 值?

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1" 
           maxThreads="660" connectionTimeout="20000" 
           redirectPort="8443" URIEncoding="WINDOWS-1256" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" connectionTimeout="20000" URIEncoding="WINDOWS-1256"  />

希望对你有帮助 问候,

关于multithreading - 几天后Tomcat 7卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20965486/

相关文章:

java - 如何在tomcat中部署kuali CM?

apache - 使用 mod_proxy_ajp 连接 Apache 和 Tomcat 有效,但 JDBC 然后失败

java - 使用 Tomcat 配置 Apache Web 服务器

linux - pthread_mutex_unlock 立即上下文切换吗?

java - JFreeChart 不会在线程上的每次迭代时显示图形?

java - 您能否暂停 Java 应用程序并从该应用程序中获取其线程的快照?

java - 为什么异步线程不能同时修改 ArrayList?

session - hazelcast tomcat session 不从应用程序上下文加载类

apache - 如何在 JBOSS 6 EAP icm AJP 和 SSL 卸载中访问 X509 subject.serialnumber

java - Web 服务器无法启动。 8080端口已被使用