Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在突然出现大量流量后,Tomcat8接受了新的连接,但没有响应_Java_Multithreading_Tomcat - Fatal编程技术网

Java 在突然出现大量流量后,Tomcat8接受了新的连接,但没有响应

Java 在突然出现大量流量后,Tomcat8接受了新的连接,但没有响应,java,multithreading,tomcat,Java,Multithreading,Tomcat,我们正在生产环境中运行Tomcat8.0.26。在常规部署之后,我们将流量切换到新部署的tomcat集群。当时每个节点上的rps大约为800。然后我们发现所有节点都运行良好,只有一个节点接受了连接,但没有响应。来自客户端的所有连接都挂起,直到超时。然后,我关闭了该节点的通信,并捕获了一些状态: 日志中未发现致命错误或异常 没有 只有几个tomcat工作线程,它们都停在那里等待新任务 http-nio2-8081-exec-613“#11568守护程序prio=5 os_prio=0 tid=0x

我们正在生产环境中运行Tomcat8.0.26。在常规部署之后,我们将流量切换到新部署的tomcat集群。当时每个节点上的rps大约为800。然后我们发现所有节点都运行良好,只有一个节点接受了连接,但没有响应。来自客户端的所有连接都挂起,直到超时。然后,我关闭了该节点的通信,并捕获了一些状态:

  • 日志中未发现致命错误或异常
  • 没有
  • 只有几个tomcat工作线程,它们都停在那里等待新任务

    http-nio2-8081-exec-613“#11568守护程序prio=5 os_prio=0 tid=0x00007f710a66000 nid=0xb202等待条件[0x00007f70fee03000]
    java.lang.Thread.State:等待(停车)
    在sun.misc.Unsafe.park(本机方法)
    -停车等待(java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    位于java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    位于org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
    位于org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
    位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    运行(Thread.java:745)
    
  • 当本地主机发出
    wget
    但服务器没有响应时,可以建立连接

    $wget localhost:8081
    --2015-09-06 19:25:39--  http://localhost:8081/
    解析本地主机…::1127.0.0.1
    正在连接到本地主机|:::1 |:8081…已连接。
    HTTP请求已发送,正在等待响应。。。
    
  • lsof
    输出:

    $lsof-n-i tcp:8081
    命令PID用户FD类型设备大小/关闭节点名称
    java 34609 web_服务器49u IPv6 2195777660 0T0TC*:tproxy(侦听)
    wget 41834 web_服务器3u IPv4 2198776305 0t0 TCP 127.0.0.1:37324->127.0.0.1:tproxy(已建立)
    
  • 建立连接后,所有tomcat工作线程仍处于停止状态


  • 这就是我观察到的情况。有人能给我一些关于这个问题的提示吗?

    在有很多线程的地方尝试这个可能会更成功。可能它们都卡在锁上了还是什么?线程转储可能会帮助您找到线程卡在的位置。@Gray我想没有。我还检查了每个线程的状态,没有线程被锁定被什么东西挡住了。