Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 几乎所有线程都处于本机状态时的线程转储问题_Java_Multithreading_Thread Safety_Thread Dump_Jstack - Fatal编程技术网

Java 几乎所有线程都处于本机状态时的线程转储问题

Java 几乎所有线程都处于本机状态时的线程转储问题,java,multithreading,thread-safety,thread-dump,jstack,Java,Multithreading,Thread Safety,Thread Dump,Jstack,我在应用程序中对主机进行了线程转储,其中大多数线程都处于(state=in_NATIVE)状态 在这些实例中,只有两个线程被阻止: Thread 31681: (state = BLOCKED) - sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame) - java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=156 (In

我在应用程序中对主机进行了线程转储,其中大多数线程都处于
(state=in_NATIVE)
状态

在这些实例中,只有两个线程被阻止:

Thread 31681: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)
 - java.util.concurrent.locks.LockSupport.park(java.lang.Object) @bci=14, line=156 (Interpreted frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await() @bci=42, line=1987 (Compiled frame)
 - java.util.concurrent.LinkedBlockingQueue.take() @bci=29, line=399 (Compiled frame)
 - java.util.concurrent.ThreadPoolExecutor.getTask() @bci=78, line=947 (Interpreted frame)
 - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=18, line=907 (Compiled frame)
 - java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)

我们进行了一些
HttpConnections
,请求在一段可配置的时间后超时。当我重新启动主机时,一切都恢复了正常

所以,我假设线程应该在某个点被阻塞

在本机代码中运行的线程指向此处:

         Thread 29587: (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.read(byte[], int, int) @bci=84, line=129 (Compiled frame)
     - java.io.BufferedInputStream.fill() @bci=175, line=218 (Compiled frame)
     - java.io.BufferedInputStream.read1(byte[], int, int) @bci=44, line=258 (Compiled frame)
     - java.io.BufferedInputStream.read(byte[], int, int) @bci=49, line=317 (Compiled frame)
     - sun.net.www.MeteredStream.read(byte[], int, int) @bci=16, line=116 (Compiled frame)
     - java.io.FilterInputStream.read(byte[], int, int) @bci=7, line=116 (Compiled frame)
     - sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(byte[], int, int) @bci=4, line=2672 (Compiled frame)
     - javax.imageio.stream.FileCacheImageInputStream.readUntil(long) @bci=64, line=121 (Compiled frame)
     - javax.imageio.stream.FileCacheImageInputStream.read(byte[], int, int) @bci=69, line=167 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(long, boolean, boolean) @bci=0 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(boolean) @bci=12, line=532 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly() @bci=92, line=277 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(int) @bci=41, line=409 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(int, boolean) @bci=2, line=525 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(int, javax.imageio.ImageReadParam, boolean) @bci=3, line=968 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.read(int, javax.imageio.ImageReadParam) @bci=8, line=948 (Compiled frame)
     - javax.imageio.ImageIO.read(javax.imageio.stream.ImageInputStream) @bci=55, line=1422 (Compiled frame)
     - javax.imageio.ImageIO.read(java.net.URL) @bci=42, line=1374 (Compiled frame)
..............
.............    
 - java.util.concurrent.Executors$RunnableAdapter.call() @bci=4, line=441 (Interpreted frame)
     - java.util.concurrent.FutureTask$Sync.innerRun() @bci=30, line=303 (Interpreted frame)
     - java.util.concurrent.FutureTask.run() @bci=4, line=138 (Interpreted frame)
     - java.util.concurrent.ThreadPoolExecutor$Worker.runTask(java.lang.Runnable) @bci=59, line=886 (Interpreted frame)
     - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=28, line=908 (Interpreted frame)
     - java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)
我想这就是罪魁祸首。我们在内部使用进行这些调用的
ImageIO
Jsoup

对于阅读线程转储,我没有太多的想法,而且我是新手。但任何帮助都将不胜感激

是否所有本机运行的线程都可能导致问题? 我应该如何进行呢


谢谢,

前三个线程转储是等待新任务执行的空闲线程。你可以忽略它们


我怀疑最后一个线程正在等待IO,而不是消耗CPU,但我不确定。

问题是,我们只有100个线程在等待IO,但在过去5天内,所有线程都超时了。当我重新启动主机时,它开始正常工作。更详细地解释一下。
Thread 31682: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Compiled frame; information may be imprecise)
 - java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=118 (Interpreted frame)
 - java.lang.ref.ReferenceQueue.remove() @bci=2, line=134 (Interpreted frame)
 - org.apache.commons.httpclient.JakartaHttpConnectionManager$ReferenceQueueThread.run() @bci=10, line=1104 (Interpreted frame)
         Thread 29587: (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.read(byte[], int, int) @bci=84, line=129 (Compiled frame)
     - java.io.BufferedInputStream.fill() @bci=175, line=218 (Compiled frame)
     - java.io.BufferedInputStream.read1(byte[], int, int) @bci=44, line=258 (Compiled frame)
     - java.io.BufferedInputStream.read(byte[], int, int) @bci=49, line=317 (Compiled frame)
     - sun.net.www.MeteredStream.read(byte[], int, int) @bci=16, line=116 (Compiled frame)
     - java.io.FilterInputStream.read(byte[], int, int) @bci=7, line=116 (Compiled frame)
     - sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(byte[], int, int) @bci=4, line=2672 (Compiled frame)
     - javax.imageio.stream.FileCacheImageInputStream.readUntil(long) @bci=64, line=121 (Compiled frame)
     - javax.imageio.stream.FileCacheImageInputStream.read(byte[], int, int) @bci=69, line=167 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(long, boolean, boolean) @bci=0 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(boolean) @bci=12, line=532 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly() @bci=92, line=277 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(int) @bci=41, line=409 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(int, boolean) @bci=2, line=525 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(int, javax.imageio.ImageReadParam, boolean) @bci=3, line=968 (Compiled frame)
     - com.sun.imageio.plugins.jpeg.JPEGImageReader.read(int, javax.imageio.ImageReadParam) @bci=8, line=948 (Compiled frame)
     - javax.imageio.ImageIO.read(javax.imageio.stream.ImageInputStream) @bci=55, line=1422 (Compiled frame)
     - javax.imageio.ImageIO.read(java.net.URL) @bci=42, line=1374 (Compiled frame)
..............
.............    
 - java.util.concurrent.Executors$RunnableAdapter.call() @bci=4, line=441 (Interpreted frame)
     - java.util.concurrent.FutureTask$Sync.innerRun() @bci=30, line=303 (Interpreted frame)
     - java.util.concurrent.FutureTask.run() @bci=4, line=138 (Interpreted frame)
     - java.util.concurrent.ThreadPoolExecutor$Worker.runTask(java.lang.Runnable) @bci=59, line=886 (Interpreted frame)
     - java.util.concurrent.ThreadPoolExecutor$Worker.run() @bci=28, line=908 (Interpreted frame)
     - java.lang.Thread.run() @bci=11, line=662 (Interpreted frame)