jiangqiushi commented on issue #1855:
URL: 
https://github.com/apache/servicecomb-java-chassis/issues/1855#issuecomment-648558398


   通过线程堆栈发现,PipedInputStream发生了死锁。
   1)所有的业务线程(tts-threadpool-1-thread-xx)都阻塞在write上。
   2)所有的vert.x-worker-thread都阻塞在read上。
   
3)通过连续堆栈,间隔5秒,一个奇怪的现象,包装PipedInputStream的InputStreamToReadStream没变,但是PipedInputStream本身变了,这应该是导致死锁的原因。
   
以vert.x-worker-thread-18这个线程为例,InputStreamToReadStream对象都是0x00000005dee881f0,但是包装的PipedInputStream对象变化了0x00000007ab705b10,0x00000007bf3394f8
   
   堆栈1:
   ```xml
   "vert.x-worker-thread-18" #87 prio=5 os_prio=0 tid=0x00007f364a1ad000 
nid=0x5dd6 in Object.wait() [0x00007f3631af3000]
      java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.io.PipedInputStream.read(PipedInputStream.java:326)
        - locked <0x00000007ab705b10> (a java.io.PipedInputStream)
        at java.io.PipedInputStream.read(PipedInputStream.java:377)
        - locked <0x00000007ab705b10> (a java.io.PipedInputStream)
        at java.io.InputStream.read(InputStream.java:101)
        at 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream$ReadResult.doRead(InputStreamToReadStream.java:106)
        at 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream.readInWorker(InputStreamToReadStream.java:127)
        - locked <0x00000005dee881f0> (a 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream)
        at 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream$$Lambda$497/1972510689.handle(Unknown
 Source)
        at 
io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:316)
        at io.vertx.core.impl.ContextImpl$$Lambda$499/1982215687.run(Unknown 
Source)
        at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
        at io.vertx.core.impl.TaskQueue$$Lambda$80/2138560569.run(Unknown 
Source)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
   
      Locked ownable synchronizers:
        - <0x00000005dd812af8> (a 
java.util.concurrent.ThreadPoolExecutor$Worker)
   ```
   
   堆栈2:
   ```xml
   "vert.x-worker-thread-18" #87 prio=5 os_prio=0 tid=0x00007f364a1ad000 
nid=0x5dd6 in Object.wait() [0x00007f3631af3000]
      java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at java.io.PipedInputStream.read(PipedInputStream.java:326)
        - locked <0x00000007bf3394f8> (a java.io.PipedInputStream)
        at java.io.PipedInputStream.read(PipedInputStream.java:377)
        - locked <0x00000007bf3394f8> (a java.io.PipedInputStream)
        at java.io.InputStream.read(InputStream.java:101)
        at 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream$ReadResult.doRead(InputStreamToReadStream.java:106)
        at 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream.readInWorker(InputStreamToReadStream.java:127)
        - locked <0x00000005dee881f0> (a 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream)
        at 
org.apache.servicecomb.foundation.vertx.stream.InputStreamToReadStream$$Lambda$497/1972510689.handle(Unknown
 Source)
        at 
io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:316)
        at io.vertx.core.impl.ContextImpl$$Lambda$499/1982215687.run(Unknown 
Source)
        at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
        at io.vertx.core.impl.TaskQueue$$Lambda$80/2138560569.run(Unknown 
Source)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
   
      Locked ownable synchronizers:
        - <0x00000005dd812af8> (a 
java.util.concurrent.ThreadPoolExecutor$Worker)
   ```
   
   请帮忙解答下,多谢!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to