Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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 AJP工作线程挂起_Java_Linux_Tomcat_Networking_Ajp - Fatal编程技术网

Java AJP工作线程挂起

Java AJP工作线程挂起,java,linux,tomcat,networking,ajp,Java,Linux,Tomcat,Networking,Ajp,CentOS 7、java 1.8.131、tomcat 7。 这个问题大约每周出现一次。Tomcat无法响应任何请求。 从套接字读取Ajp消息时,Ajp线程挂起。 它挂起在本机代码中。tomcat重新启动时问题消失 当问题出现时,我看到200个挂起的线程(tomcat.maxthreads=200)。 我怎样才能解决这个问题 Locked ownable synchronizers: - <0x00000001198fe520>, (a java/util/concurre

CentOS 7、java 1.8.131、tomcat 7。 这个问题大约每周出现一次。Tomcat无法响应任何请求。 从套接字读取Ajp消息时,Ajp线程挂起。 它挂起在本机代码中。tomcat重新启动时问题消失

当问题出现时,我看到200个挂起的线程(tomcat.maxthreads=200)。 我怎样才能解决这个问题

Locked ownable synchronizers:
    - <0x00000001198fe520>, (a java/util/concurrent/ThreadPoolExecutor$Worker)

Thread 83765: (state = IN_NATIVE)
 - java.net.SocketInputStream.socketRead0(java.io.FileDescriptor, byte[], int, int, int) @bci=0 (Compiled frame; information may be imprecise)
 - java.net.SocketInputStream.socketRead(java.io.FileDescriptor, byte[], int, int, int) @bci=8, line=116 (Compiled frame)
 - java.net.SocketInputStream.read(byte[], int, int, int) @bci=117, line=171 (Compiled frame)
 - java.net.SocketInputStream.read(byte[], int, int) @bci=11, line=141 (Compiled frame)
 - org.apache.coyote.ajp.AjpProcessor.read(byte[], int, int) @bci=25, line=312 (Compiled frame)
 - 
锁定的可拥有同步器:
-,(一个java/util/concurrent/ThreadPoolExecutor$Worker)
线程83765:(state=IN_NATIVE)
-java.net.SocketInputStream.socketRead0(java.io.FileDescriptor,字节[],int,int,int)@bci=0(编译帧;信息可能不精确)
-java.net.SocketInputStream.socketRead(java.io.FileDescriptor,字节[],int,int,int)@bci=8,line=116(编译帧)
-java.net.SocketInputStream.read(字节[],int,int,int)@bci=117,line=171(编译帧)
-java.net.SocketInputStream.read(字节[],int,int)@bci=11,line=141(编译帧)
-org.apache.coyote.ajp.AjpProcessor.read(字节[],int,int)@bci=25,line=312(编译帧)
- 

没有代码很难知道,但我通常会看到由试图访问外部资源(ftp服务器、JMS队列、数据库等)的代码导致的挂起线程,而该外部资源没有响应。代码必须处理这些情况(包括超时、池连接等)。我习惯于在WebSphere中调试类似的东西,在那里我会转储线程(kill-3),并与开发人员一起查看它们试图做什么。tomcat必须存在类似的东西,所以这与代码无关,因为从Apache读取AjpMessage时线程挂起。自定义代码在AjpRequset被读取后开始工作。如果您认为它在AJP模块和Tomcat之间,您可以将所有日志置于调试模式,并希望在那里看到一些东西。事实上,它是间歇性的,这可能表明某些网络干扰(高延迟、中断等)。请发布该线程转储的剩余堆栈跟踪。你确定这些线程不仅仅是在做等待传入请求的正常工作吗?这是他们的主要工作。。。