On Wed, 16 Mar 2022 02:57:20 GMT, Yi Yang <yy...@openjdk.org> wrote:

>> When we use jcmd <pid> Thread.dump/jstack <pid>, we could dump all Java 
>> thread stack trace, but unfortunately we are not able to print NonJavaThread 
>> stack trace such as VMThread/GCWorker, etc. For these threads, we know 
>> nothing about what are they doing/are they blocked in pthread condition from 
>> jstack output. An alternative is to use pstack, it internally attaches 
>> destination process and uses `thread apply all bt`, which introduces more 
>> overhead and much more dangerous.
>> 
>> ====== JStack Ouput(Currrent)
>> 
>> ...
>> "ApplicationImpl pooled thread 441" #1478 prio=4 os_prio=31 cpu=11.71ms 
>> elapsed=60.30s tid=0x00007f8d32171000 nid=0x22f23 waiting on condition  
>> [0x0000700010d5d000]
>>    java.lang.Thread.State: TIMED_WAITING (parking)
>>      at jdk.internal.misc.Unsafe.park(java.base@11.0.11/Native Method)
>>      - parking to wait for  <0x00000007af851760> (a 
>> java.util.concurrent.SynchronousQueue$TransferStack)
>>      at 
>> java.util.concurrent.locks.LockSupport.parkNanos(java.base@11.0.11/LockSupport.java:234)
>>      at 
>> java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(java.base@11.0.11/SynchronousQueue.java:462)
>>      at 
>> java.util.concurrent.SynchronousQueue$TransferStack.transfer(java.base@11.0.11/SynchronousQueue.java:361)
>>      at 
>> java.util.concurrent.SynchronousQueue.poll(java.base@11.0.11/SynchronousQueue.java:937)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.getTask(java.base@11.0.11/ThreadPoolExecutor.java:1053)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.11/ThreadPoolExecutor.java:1114)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.11/ThreadPoolExecutor.java:628)
>>      at 
>> java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(java.base@11.0.11/Executors.java:668)
>>      at 
>> java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(java.base@11.0.11/Executors.java:665)
>>      at java.security.AccessController.doPrivileged(java.base@11.0.11/Native 
>> Method)
>>      at 
>> java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(java.base@11.0.11/Executors.java:665)
>>      at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
>> 
>> "VM Thread" os_prio=31 cpu=31205.83ms elapsed=154131.15s 
>> tid=0x00007f8d49046000 nid=0x4703 runnable
>> 
>> "GC Thread#0" os_prio=31 cpu=3811.96ms elapsed=154131.18s 
>> tid=0x00007f8d49809800 nid=0x3603 runnable
>> 
>> "GC Thread#1" os_prio=31 cpu=3749.09ms elapsed=154130.24s 
>> tid=0x00007f8d4a9b3000 nid=0x6103 runnable
>> 
>> "GC Thread#2" os_prio=31 cpu=3745.73ms elapsed=154129.74s 
>> tid=0x00007f8d48249000 nid=0x12f27 runnable
>> 
>> "GC Thread#3" os_prio=31 cpu=3692.77ms elapsed=154129.74s 
>> tid=0x00007f8d48b93000 nid=0xe50b runnable
>> 
>> "GC Thread#4" os_prio=31 cpu=3728.57ms elapsed=154129.74s 
>> tid=0x00007f8d47b0b000 nid=0xe603 runnable
>> 
>> "GC Thread#5" os_prio=31 cpu=3726.08ms elapsed=154129.74s 
>> tid=0x00007f8d47afc800 nid=0xe803 runnable
>> 
>> "GC Thread#6" os_prio=31 cpu=3660.35ms elapsed=154129.02s 
>> tid=0x00007f8d48de5800 nid=0x15d2f runnable
>> 
>> "GC Thread#7" os_prio=31 cpu=3676.68ms elapsed=154129.02s 
>> tid=0x00007f8d48dc4800 nid=0x16103 runnable
>> 
>> "GC Thread#8" os_prio=31 cpu=3676.15ms elapsed=154128.31s 
>> tid=0x00007f8d4849d800 nid=0x1f503 runnable
>> 
>> "GC Thread#9" os_prio=31 cpu=3570.95ms elapsed=154128.31s 
>> tid=0x00007f8d494ab000 nid=0x1f303 runnable
>> 
>> "CMS Main Thread" os_prio=31 cpu=6715.33ms elapsed=154131.18s 
>> tid=0x00007f8d4780f800 nid=0x4b03 runnable
>> 
>> "CMS Thread#0" os_prio=31 cpu=2429.86ms elapsed=154131.18s 
>> tid=0x00007f8d4900e000 nid=0x3703 runnable
>> 
>> "CMS Thread#1" os_prio=31 cpu=2422.35ms elapsed=154129.72s 
>> tid=0x00007f8d4d044000 nid=0x11a03 runnable
>> 
>> "CMS Thread#2" os_prio=31 cpu=2418.81ms elapsed=154129.72s 
>> tid=0x00007f8d48b93800 nid=0xea03 runnable
>> 
>> "VM Periodic Task Thread" os_prio=31 cpu=10658.80ms elapsed=154130.41s 
>> tid=0x00007f8d49035000 nid=0xa003 waiting on condition
>> 
>> JNI global refs: 660, weak refs: 1217
>> 
>> 
>> Most of above information makes no sense for further debugging. I think we 
>> can extend this functionality, e.g. add a new flag such as 
>> DumpAllThreadStackTrace, to print non java thread stack trace:
>> 
>> ====== JStack Ouput(Modified)
>> 
>> 2022-03-16 10:46:55
>> Full thread dump OpenJDK 64-Bit Server VM 
>> (19-internal-adhoc.qingfengyy.jdktip mixed mode, sharing):
>> 
>> Threads class SMR info:
>> _java_thread_list=0x00007f15040015f0, length=22, elements={
>> 0x00007f159c0255b0, 0x00007f159c1babc0, 0x00007f159c1bc180, 
>> 0x00007f159c1c21d0,
>> 0x00007f159c1c36a0, 0x00007f159c1c4bb0, 0x00007f159c1c6730, 
>> 0x00007f159c1c7db0,
>> 0x00007f159c1c9330, 0x00007f159c1fc300, 0x00007f159c211a60, 
>> 0x00007f159c213b60,
>> 0x00007f159c302960, 0x00007f14cc0319d0, 0x00007f14cc0375c0, 
>> 0x00007f159c307e80,
>> 0x00007f159c30db30, 0x00007f159c3e6db0, 0x00007f159c647300, 
>> 0x00007f159c64b600,
>> 0x00007f159c678910, 0x00007f1504000be0
>> }
>> 
>> "main" #1 prio=5 os_prio=0 cpu=766.48ms elapsed=23.73s 
>> tid=0x00007f159c0255b0 nid=115919 in Object.wait()  [0x00007f15a3e58000]
>>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <no object reference available>
>>      at 
>> jdk.internal.org.jline.utils.NonBlockingInputStreamImpl.read(jdk.internal.le@19-internal/NonBlockingInputStreamImpl.java:139)
>>      - locked <0x00000000a2000368> (a 
>> jdk.internal.jshell.tool.ConsoleIOContext$1)
>>      at 
>> jdk.internal.org.jline.utils.NonBlockingInputStream.read(jdk.internal.le@19-internal/NonBlockingInputStream.java:62)
>>      at 
>> jdk.internal.org.jline.utils.NonBlocking$NonBlockingInputStreamReader.read(jdk.internal.le@19-internal/NonBlocking.java:168)
>>      at 
>> jdk.internal.org.jline.utils.NonBlockingReader.read(jdk.internal.le@19-internal/NonBlockingReader.java:57)
>>      at 
>> jdk.internal.org.jline.keymap.BindingReader.readCharacter(jdk.internal.le@19-internal/BindingReader.java:160)
>>      at 
>> jdk.internal.org.jline.keymap.BindingReader.readBinding(jdk.internal.le@19-internal/BindingReader.java:110)
>>      at 
>> jdk.internal.org.jline.keymap.BindingReader.readBinding(jdk.internal.le@19-internal/BindingReader.java:61)
>>      at 
>> jdk.internal.org.jline.reader.impl.LineReaderImpl.doReadBinding(jdk.internal.le@19-internal/LineReaderImpl.java:923)
>>      at 
>> jdk.internal.org.jline.reader.impl.LineReaderImpl.readBinding(jdk.internal.le@19-internal/LineReaderImpl.java:956)
>>      at 
>> jdk.internal.jshell.tool.ConsoleIOContext$2.readBinding(jdk.jshell@19-internal/ConsoleIOContext.java:173)
>>      at 
>> jdk.internal.org.jline.reader.impl.LineReaderImpl.readLine(jdk.internal.le@19-internal/LineReaderImpl.java:651)
>>      at 
>> jdk.internal.org.jline.reader.impl.LineReaderImpl.readLine(jdk.internal.le@19-internal/LineReaderImpl.java:468)
>>      at 
>> jdk.internal.jshell.tool.ConsoleIOContext.readLine(jdk.jshell@19-internal/ConsoleIOContext.java:249)
>>      at 
>> jdk.internal.jshell.tool.JShellTool.getInput(jdk.jshell@19-internal/JShellTool.java:1281)
>>      at 
>> jdk.internal.jshell.tool.JShellTool.run(jdk.jshell@19-internal/JShellTool.java:1215)
>>      at 
>> jdk.internal.jshell.tool.JShellTool.start(jdk.jshell@19-internal/JShellTool.java:1001)
>>      at 
>> jdk.internal.jshell.tool.JShellToolBuilder.start(jdk.jshell@19-internal/JShellToolBuilder.java:261)
>>      at 
>> jdk.internal.jshell.tool.JShellToolProvider.main(jdk.jshell@19-internal/JShellToolProvider.java:120)
>> 
>> "Reference Handler" #2 daemon prio=10 os_prio=0 cpu=1.04ms elapsed=23.72s 
>> tid=0x00007f159c1babc0 nid=115926 waiting on condition  [0x00007f1529302000]
>>    java.lang.Thread.State: RUNNABLE
>>      at 
>> java.lang.ref.Reference.waitForReferencePendingList(java.base@19-internal/Native
>>  Method)
>>      at 
>> java.lang.ref.Reference.processPendingReferences(java.base@19-internal/Reference.java:253)
>>      at 
>> java.lang.ref.Reference$ReferenceHandler.run(java.base@19-internal/Reference.java:215)
>> 
>> "Finalizer" #3 daemon prio=8 os_prio=0 cpu=0.35ms elapsed=23.72s 
>> tid=0x00007f159c1bc180 nid=115927 in Object.wait()  [0x00007f1529201000]
>>    java.lang.Thread.State: WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <0x00000000a00002e8> (a java.lang.ref.ReferenceQueue$Lock)
>>      at 
>> java.lang.ref.ReferenceQueue.remove(java.base@19-internal/ReferenceQueue.java:155)
>>      - locked <0x00000000a00002e8> (a java.lang.ref.ReferenceQueue$Lock)
>>      at 
>> java.lang.ref.ReferenceQueue.remove(java.base@19-internal/ReferenceQueue.java:176)
>>      at 
>> java.lang.ref.Finalizer$FinalizerThread.run(java.base@19-internal/Finalizer.java:183)
>> 
>> "Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0.24ms elapsed=23.71s 
>> tid=0x00007f159c1c21d0 nid=115928 waiting on condition  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>> 
>> "Service Thread" #5 daemon prio=9 os_prio=0 cpu=0.20ms elapsed=23.71s 
>> tid=0x00007f159c1c36a0 nid=115929 runnable  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>> 
>> "Monitor Deflation Thread" #6 daemon prio=9 os_prio=0 cpu=0.24ms 
>> elapsed=23.71s tid=0x00007f159c1c4bb0 nid=115930 runnable  
>> [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>> 
>> "C2 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=527.71ms elapsed=23.71s 
>> tid=0x00007f159c1c6730 nid=115931 waiting on condition  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>>    No compile task
>> 
>> "C1 CompilerThread0" #19 daemon prio=9 os_prio=0 cpu=216.87ms elapsed=23.71s 
>> tid=0x00007f159c1c7db0 nid=115932 waiting on condition  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>>    No compile task
>> 
>> "Sweeper thread" #25 daemon prio=9 os_prio=0 cpu=0.04ms elapsed=23.71s 
>> tid=0x00007f159c1c9330 nid=115933 runnable  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>> 
>> "Notification Thread" #26 daemon prio=9 os_prio=0 cpu=0.05ms elapsed=23.70s 
>> tid=0x00007f159c1fc300 nid=115936 runnable  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>> 
>> "Common-Cleaner" #27 daemon prio=8 os_prio=0 cpu=0.99ms elapsed=23.68s 
>> tid=0x00007f159c211a60 nid=115938 in Object.wait()  [0x00007f15282d2000]
>>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <no object reference available>
>>      at 
>> java.lang.ref.ReferenceQueue.remove(java.base@19-internal/ReferenceQueue.java:155)
>>      - locked <0x00000000a0000628> (a java.lang.ref.ReferenceQueue$Lock)
>>      at 
>> jdk.internal.ref.CleanerImpl.run(java.base@19-internal/CleanerImpl.java:140)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>>      at 
>> jdk.internal.misc.InnocuousThread.run(java.base@19-internal/InnocuousThread.java:162)
>> 
>> "Timer-0" #28 daemon prio=5 os_prio=0 cpu=0.10ms elapsed=23.68s 
>> tid=0x00007f159c213b60 nid=115939 in Object.wait()  [0x00007f15281d1000]
>>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <0x00000000a00007e8> (a java.util.TaskQueue)
>>      at java.util.TimerThread.mainLoop(java.base@19-internal/Timer.java:563)
>>      - locked <0x00000000a00007e8> (a java.util.TaskQueue)
>>      at java.util.TimerThread.run(java.base@19-internal/Timer.java:516)
>> 
>> "process reaper" #30 daemon prio=10 os_prio=0 cpu=0.17ms elapsed=23.53s 
>> tid=0x00007f159c302960 nid=115944 runnable  [0x00007f15a3c9e000]
>>    java.lang.Thread.State: RUNNABLE
>>      at 
>> java.lang.ProcessHandleImpl.waitForProcessExit0(java.base@19-internal/Native 
>> Method)
>>      at 
>> java.lang.ProcessHandleImpl$1.run(java.base@19-internal/ProcessHandleImpl.java:147)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@19-internal/ThreadPoolExecutor.java:1136)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@19-internal/ThreadPoolExecutor.java:635)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "JDI Internal Event Handler" #34 daemon prio=5 os_prio=0 cpu=14.16ms 
>> elapsed=23.49s tid=0x00007f14cc0319d0 nid=115971 in Object.wait()  
>> [0x00007f15096b7000]
>>    java.lang.Thread.State: WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <no object reference available>
>>      at java.lang.Object.wait(java.base@19-internal/Object.java:338)
>>      at 
>> com.sun.tools.jdi.EventQueueImpl.removeUnfiltered(jdk.jdi@19-internal/EventQueueImpl.java:190)
>>      - locked <0x00000000a0000e80> (a com.sun.tools.jdi.EventQueueImpl)
>>      at 
>> com.sun.tools.jdi.EventQueueImpl.removeInternal(jdk.jdi@19-internal/EventQueueImpl.java:125)
>>      at 
>> com.sun.tools.jdi.InternalEventHandler.run(jdk.jdi@19-internal/InternalEventHandler.java:61)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "JDI Target VM Interface" #33 daemon prio=5 os_prio=0 cpu=16.02ms 
>> elapsed=23.49s tid=0x00007f14cc0375c0 nid=115972 runnable  
>> [0x00007f15095b6000]
>>    java.lang.Thread.State: RUNNABLE
>>      at sun.nio.ch.SocketDispatcher.read0(java.base@19-internal/Native 
>> Method)
>>      at 
>> sun.nio.ch.SocketDispatcher.read(java.base@19-internal/SocketDispatcher.java:47)
>>      at 
>> sun.nio.ch.NioSocketImpl.tryRead(java.base@19-internal/NioSocketImpl.java:258)
>>      at 
>> sun.nio.ch.NioSocketImpl.implRead(java.base@19-internal/NioSocketImpl.java:309)
>>      at 
>> sun.nio.ch.NioSocketImpl.read(java.base@19-internal/NioSocketImpl.java:347)
>>      at 
>> sun.nio.ch.NioSocketImpl$1.read(java.base@19-internal/NioSocketImpl.java:800)
>>      at 
>> java.net.Socket$SocketInputStream.read(java.base@19-internal/Socket.java:966)
>>      at 
>> java.net.Socket$SocketInputStream.read(java.base@19-internal/Socket.java:961)
>>      at 
>> com.sun.tools.jdi.SocketConnection.readPacket(jdk.jdi@19-internal/SocketConnection.java:82)
>>      - locked <0x00000000a00012e0> (a java.lang.Object)
>>      at com.sun.tools.jdi.TargetVM.run(jdk.jdi@19-internal/TargetVM.java:123)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "event-handler" #35 daemon prio=5 os_prio=0 cpu=8.29ms elapsed=23.48s 
>> tid=0x00007f159c307e80 nid=115973 in Object.wait()  [0x00007f15098b9000]
>>    java.lang.Thread.State: WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <no object reference available>
>>      at java.lang.Object.wait(java.base@19-internal/Object.java:338)
>>      at 
>> com.sun.tools.jdi.EventQueueImpl.removeUnfiltered(jdk.jdi@19-internal/EventQueueImpl.java:190)
>>      - locked <0x00000000a0001e98> (a com.sun.tools.jdi.EventQueueImpl)
>>      at 
>> com.sun.tools.jdi.EventQueueImpl.remove(jdk.jdi@19-internal/EventQueueImpl.java:97)
>>      at 
>> com.sun.tools.jdi.EventQueueImpl.remove(jdk.jdi@19-internal/EventQueueImpl.java:83)
>>      at 
>> jdk.jshell.execution.JdiEventHandler.run(jdk.jshell@19-internal/JdiEventHandler.java:79)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "output reader" #36 daemon prio=5 os_prio=0 cpu=0.30ms elapsed=23.44s 
>> tid=0x00007f159c30db30 nid=115990 runnable  [0x00007f15097b8000]
>>    java.lang.Thread.State: RUNNABLE
>>      at sun.nio.ch.SocketDispatcher.read0(java.base@19-internal/Native 
>> Method)
>>      at 
>> sun.nio.ch.SocketDispatcher.read(java.base@19-internal/SocketDispatcher.java:47)
>>      at 
>> sun.nio.ch.NioSocketImpl.tryRead(java.base@19-internal/NioSocketImpl.java:258)
>>      at 
>> sun.nio.ch.NioSocketImpl.implRead(java.base@19-internal/NioSocketImpl.java:309)
>>      at 
>> sun.nio.ch.NioSocketImpl.read(java.base@19-internal/NioSocketImpl.java:347)
>>      at 
>> sun.nio.ch.NioSocketImpl$1.read(java.base@19-internal/NioSocketImpl.java:800)
>>      at 
>> java.net.Socket$SocketInputStream.read(java.base@19-internal/Socket.java:966)
>>      at 
>> java.net.Socket$SocketInputStream.read(java.base@19-internal/Socket.java:961)
>>      at 
>> java.io.FilterInputStream.read(java.base@19-internal/FilterInputStream.java:79)
>>      at 
>> jdk.jshell.execution.DemultiplexInput.run(jdk.jshell@19-internal/DemultiplexInput.java:60)
>> 
>> "Thread-1" #38 daemon prio=5 os_prio=0 cpu=222.19ms elapsed=23.37s 
>> tid=0x00007f159c3e6db0 nid=115995 waiting on condition  [0x00007f15094b5000]
>>    java.lang.Thread.State: WAITING (parking)
>>      at jdk.internal.misc.Unsafe.park(java.base@19-internal/Native Method)
>>      - parking to wait for  <0x00000000a007a880> (a 
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>>      at 
>> java.util.concurrent.locks.LockSupport.park(java.base@19-internal/LockSupport.java:341)
>>      at 
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@19-internal/AbstractQueuedSynchronizer.java:506)
>>      at 
>> java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@19-internal/ForkJoinPool.java:3464)
>>      at 
>> java.util.concurrent.ForkJoinPool.managedBlock(java.base@19-internal/ForkJoinPool.java:3435)
>>      at 
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@19-internal/AbstractQueuedSynchronizer.java:1623)
>>      at 
>> java.util.concurrent.LinkedBlockingQueue.take(java.base@19-internal/LinkedBlockingQueue.java:435)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.getTask(java.base@19-internal/ThreadPoolExecutor.java:1062)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@19-internal/ThreadPoolExecutor.java:1122)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@19-internal/ThreadPoolExecutor.java:635)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "process reaper" #40 daemon prio=10 os_prio=0 cpu=1.83ms elapsed=22.94s 
>> tid=0x00007f159c647300 nid=116044 waiting on condition  [0x00007f15280d0000]
>>    java.lang.Thread.State: TIMED_WAITING (parking)
>>      at jdk.internal.misc.Unsafe.park(java.base@19-internal/Native Method)
>>      - parking to wait for  <0x00000000a0079fb0> (a 
>> java.util.concurrent.SynchronousQueue$TransferStack)
>>      at 
>> java.util.concurrent.locks.LockSupport.parkNanos(java.base@19-internal/LockSupport.java:252)
>>      at 
>> java.util.concurrent.SynchronousQueue$TransferStack.transfer(java.base@19-internal/SynchronousQueue.java:401)
>>      at 
>> java.util.concurrent.SynchronousQueue.poll(java.base@19-internal/SynchronousQueue.java:903)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.getTask(java.base@19-internal/ThreadPoolExecutor.java:1061)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@19-internal/ThreadPoolExecutor.java:1122)
>>      at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@19-internal/ThreadPoolExecutor.java:635)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "Thread-3" #41 daemon prio=5 os_prio=0 cpu=1.39ms elapsed=22.94s 
>> tid=0x00007f159c64b600 nid=116045 runnable  [0x00007f14734ed000]
>>    java.lang.Thread.State: RUNNABLE
>>      at java.io.FileInputStream.read0(java.base@19-internal/Native Method)
>>      at 
>> java.io.FileInputStream.read(java.base@19-internal/FileInputStream.java:228)
>>      at 
>> jdk.internal.org.jline.terminal.impl.AbstractPty$PtyInputStream.read(jdk.internal.le@19-internal/AbstractPty.java:73)
>>      at 
>> jdk.internal.org.jline.utils.NonBlockingInputStream.read(jdk.internal.le@19-internal/NonBlockingInputStream.java:62)
>>      at 
>> jdk.internal.jshell.tool.StopDetectingInputStream.lambda$setInputStream$0(jdk.jshell@19-internal/StopDetectingInputStream.java:74)
>>      at 
>> jdk.internal.jshell.tool.StopDetectingInputStream$$Lambda$355/0x0000000800dd68d0.run(jdk.jshell@19-internal/Unknown
>>  Source)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "null non blocking reader thread" #43 daemon prio=5 os_prio=0 cpu=0.15ms 
>> elapsed=22.78s tid=0x00007f159c678910 nid=116063 in Object.wait()  
>> [0x00007f1472ee6000]
>>    java.lang.Thread.State: WAITING (on object monitor)
>>      at java.lang.Object.wait(java.base@19-internal/Native Method)
>>      - waiting on <no object reference available>
>>      at java.lang.Object.wait(java.base@19-internal/Object.java:338)
>>      at 
>> jdk.internal.jshell.tool.StopDetectingInputStream.read(jdk.jshell@19-internal/StopDetectingInputStream.java:111)
>>      - locked <0x00000000a2000908> (a 
>> jdk.internal.jshell.tool.StopDetectingInputStream)
>>      at 
>> jdk.internal.org.jline.utils.NonBlockingInputStreamImpl.run(jdk.internal.le@19-internal/NonBlockingInputStreamImpl.java:216)
>>      at 
>> jdk.internal.org.jline.utils.NonBlockingInputStreamImpl$$Lambda$530/0x0000000800dfde40.run(jdk.internal.le@19-internal/Unknown
>>  Source)
>>      at java.lang.Thread.run(java.base@19-internal/Thread.java:828)
>> 
>> "Attach Listener" #44 daemon prio=9 os_prio=0 cpu=0.17ms elapsed=0.10s 
>> tid=0x00007f1504000be0 nid=116383 waiting on condition  [0x0000000000000000]
>>    java.lang.Thread.State: RUNNABLE
>> 
>> "VM Thread" os_prio=0 cpu=8.31ms elapsed=23.72s tid=0x00007f159c1b78f0 
>> nid=115925 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> V  [libjvm.so+0xf21ec5]  VM_PrintThreads::doit()+0x25
>> V  [libjvm.so+0xf225aa]  VM_Operation::evaluate()+0xea
>> V  [libjvm.so+0xf23f18]  VMThread::evaluate_operation(VM_Operation*)+0xb8
>> V  [libjvm.so+0xf245c7]  VMThread::inner_execute(VM_Operation*)+0x3a7
>> V  [libjvm.so+0xf24877]  VMThread::run()+0xb7
>> V  [libjvm.so+0xe99770]  Thread::call_run()+0xc0
>> V  [libjvm.so+0xc37a08]  thread_native_entry(Thread*)+0xd8
>> 
>> "GC Thread#0" os_prio=0 cpu=39.19ms elapsed=23.73s tid=0x00007f159c066a10 
>> nid=115920 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#1" os_prio=0 cpu=9.75ms elapsed=23.16s tid=0x00007f15180140e0 
>> nid=116014 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#2" os_prio=0 cpu=0.48ms elapsed=23.15s tid=0x00007f151801b730 
>> nid=116015 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#3" os_prio=0 cpu=11.09ms elapsed=23.15s tid=0x00007f151801c160 
>> nid=116016 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#4" os_prio=0 cpu=24.95ms elapsed=23.15s tid=0x00007f151801ccc0 
>> nid=116017 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#5" os_prio=0 cpu=0.58ms elapsed=23.15s tid=0x00007f151801d820 
>> nid=116018 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#6" os_prio=0 cpu=35.58ms elapsed=23.15s tid=0x00007f151801e380 
>> nid=116019 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#7" os_prio=0 cpu=13.88ms elapsed=22.98s tid=0x00007f151801b050 
>> nid=116042 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "GC Thread#8" os_prio=0 cpu=12.97ms elapsed=22.92s tid=0x00007f1518021950 
>> nid=116047 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Main Marker" os_prio=0 cpu=0.84ms elapsed=23.73s tid=0x00007f159c076ed0 
>> nid=115921 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xba33]  pthread_cond_wait+0xc3
>> V  [libjvm.so+0xbf1589]  Monitor::wait_without_safepoint_check(long)+0x39
>> V  [libjvm.so+0x725fda]  G1ConcurrentMarkThread::wait_for_next_cycle()+0x3a
>> V  [libjvm.so+0x7270bb]  G1ConcurrentMarkThread::run_service()+0xdb
>> V  [libjvm.so+0x60be0b]  ConcurrentGCThread::run()+0x1b
>> V  [libjvm.so+0xe99770]  Thread::call_run()+0xc0
>> V  [libjvm.so+0xc37a08]  thread_native_entry(Thread*)+0xd8
>> 
>> "G1 Conc#0" os_prio=0 cpu=6.39ms elapsed=23.73s tid=0x00007f159c077f50 
>> nid=115922 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#1" os_prio=0 cpu=1.74ms elapsed=23.05s tid=0x00007f152c000960 
>> nid=116022 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#2" os_prio=0 cpu=1.23ms elapsed=23.05s tid=0x00007f152c001490 
>> nid=116023 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#3" os_prio=0 cpu=2.04ms elapsed=23.05s tid=0x00007f152c001ff0 
>> nid=116024 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#4" os_prio=0 cpu=1.28ms elapsed=23.05s tid=0x00007f152c002b50 
>> nid=116025 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#5" os_prio=0 cpu=1.60ms elapsed=23.05s tid=0x00007f152c0036b0 
>> nid=116026 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#6" os_prio=0 cpu=1.61ms elapsed=23.05s tid=0x00007f152c004210 
>> nid=116027 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#7" os_prio=0 cpu=2.00ms elapsed=23.05s tid=0x00007f152c005160 
>> nid=116028 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#8" os_prio=0 cpu=1.58ms elapsed=23.05s tid=0x00007f152c0060b0 
>> nid=116029 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#9" os_prio=0 cpu=1.26ms elapsed=23.05s tid=0x00007f152c007000 
>> nid=116030 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#10" os_prio=0 cpu=1.61ms elapsed=23.05s tid=0x00007f152c007f50 
>> nid=116031 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#11" os_prio=0 cpu=1.52ms elapsed=23.05s tid=0x00007f152c008ea0 
>> nid=116032 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#12" os_prio=0 cpu=1.17ms elapsed=23.05s tid=0x00007f152c009df0 
>> nid=116033 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#13" os_prio=0 cpu=1.88ms elapsed=23.05s tid=0x00007f152c00ad40 
>> nid=116034 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#14" os_prio=0 cpu=1.31ms elapsed=23.05s tid=0x00007f152c00bc90 
>> nid=116035 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Conc#15" os_prio=0 cpu=1.52ms elapsed=23.05s tid=0x00007f152c00cbe0 
>> nid=116036 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Refine#0" os_prio=0 cpu=0.03ms elapsed=23.73s tid=0x00007f159c1881d0 
>> nid=115923 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29
>> 
>> "G1 Service" os_prio=0 cpu=0.72ms elapsed=23.73s tid=0x00007f159c189290 
>> nid=115924 runnable  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xbde2]  pthread_cond_timedwait+0x132
>> V  [libjvm.so+0xbf1589]  Monitor::wait_without_safepoint_check(long)+0x39
>> V  [libjvm.so+0x77d208]  G1ServiceThread::wait_for_task()+0xf8
>> V  [libjvm.so+0x77d600]  G1ServiceThread::run_service()+0x20
>> V  [libjvm.so+0x60be0b]  ConcurrentGCThread::run()+0x1b
>> V  [libjvm.so+0xe99770]  Thread::call_run()+0xc0
>> V  [libjvm.so+0xc37a08]  thread_native_entry(Thread*)+0xd8
>> 
>> "VM Periodic Task Thread" os_prio=0 cpu=4.05ms elapsed=23.71s 
>> tid=0x00007f159c1fddf0 nid=115937 waiting on condition  
>> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native 
>> code)
>> C  [libpthread.so.0+0xbde2]  pthread_cond_timedwait+0x132
>> V  [libjvm.so+0xbf1589]  Monitor::wait_without_safepoint_check(long)+0x39
>> V  [libjvm.so+0xc07015]  WatcherThread::sleep() const+0xa5
>> V  [libjvm.so+0xc070e5]  WatcherThread::run()+0x35
>> V  [libjvm.so+0xe99770]  Thread::call_run()+0xc0
>> V  [libjvm.so+0xc37a08]  thread_native_entry(Thread*)+0xd8
>> 
>> JNI global refs: 28, weak refs: 0
>
> Yi Yang has refreshed the contents of this pull request, and previous commits 
> have been removed. The incremental views will show differences compared to 
> the previous content of the PR. The pull request contains one new commit 
> since the last revision:
> 
>   8283147: Include NonJavaThread stacktrace during thread dump

Clarification on why there are some one-line frame:

VMError::print_native_stack output

"G1 Conc#7" os_prio=0 cpu=2.33ms elapsed=11.39s tid=0x00007f635c004d70 
nid=71098 runnable  
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libpthread.so.0+0xdb39]  do_futex_wait.constprop.1+0x29


pstack outpout

Thread 40 (Thread 0x7f62b3bf7700 (LWP 71098)):
#0  0x00007f63d32a6b3b in do_futex_wait.constprop () from /lib64/libpthread.so.0
#1  0x00007f63d32a6bcf in __new_sem_wait_slow.constprop.0 () from 
/lib64/libpthread.so.0
#2  0x00007f63d32a6c6b in sem_wait@@GLIBC_2.2.5 () from /lib64/libpthread.so.0
#3  0x00007f63d23f7c32 in PosixSemaphore::wait (this=this@entry=0x7f63cc077e78) 
at /home/qingfeng.yy/jdktip/src/hotspot/os/posix/semaphore_posix.cpp:65
#4  0x00007f63d265b81b in Semaphore::wait (this=0x7f63cc077e78) at 
/home/qingfeng.yy/jdktip/src/hotspot/share/runtime/semaphore.hpp:55
#5  WorkerTaskDispatcher::worker_run_task (this=0x7f63cc077e68) at 
/home/qingfeng.yy/jdktip/src/hotspot/share/gc/shared/workerThread.cpp:60
#6  WorkerThread::run (this=0x7f635c004d70) at 
/home/qingfeng.yy/jdktip/src/hotspot/share/gc/shared/workerThread.cpp:163
#7  0x00007f63d25aa790 in Thread::call_run (this=this@entry=0x7f635c004d70) at 
/home/qingfeng.yy/jdktip/src/hotspot/share/runtime/thread.cpp:357
#8  0x00007f63d2348a28 in thread_native_entry (thread=0x7f635c004d70) at 
/home/qingfeng.yy/jdktip/src/hotspot/os/linux/os_linux.cpp:706
#9  0x00007f63d32a0ea5 in start_thread () from /lib64/libpthread.so.0
#10 0x00007f63d2dc58dd in clone () from /lib64/libc.so.6


The top frame is as follows:

C frame (sp=0x00007f6338ca0d90 unextended sp=0x00007f6338ca0d90, 
fp=0x00007f63cc0667c8, real_fp=0x00007f63cc0667c8, pc=0x00007f63d32a6b39 
link=0x0000000900000000)

do_futex_wait.constprop don't have a valid link/last_frame_pointer, because 
libpthread has some novel assembly code:


000000000000db10 <do_futex_wait.constprop.1>:
    db10:       55                      push   %rbp
    db11:       48 89 fd                mov    %rdi,%rbp
    db14:       53                      push   %rbx
    db15:       48 83 ec 08             sub    $0x8,%rsp
    db19:       8b 5f 08                mov    0x8(%rdi),%ebx
    db1c:       e8 1f 09 00 00          callq  e440 
<__pthread_enable_asynccancel>
    db21:       45 31 d2                xor    %r10d,%r10d
    db24:       41 89 c0                mov    %eax,%r8d
    db27:       31 d2                   xor    %edx,%edx
    db29:       89 de                   mov    %ebx,%esi
    db2b:       bb ca 00 00 00          mov    $0xca,%ebx
    db30:       48 89 ef                mov    %rbp,%rdi
    db33:       40 80 f6 80             xor    $0x80,%sil
    db37:       89 d8                   mov    %ebx,%eax
    db39:       0f 05                   syscall 
    db3b:       89 c3                   mov    %eax,%ebx
    ....
000000000000db80 <__new_sem_wait_slow.constprop.0>:
    db80:       41 54                   push   %r12
    db82:       48 b8 00 00 00 00 01    movabs $0x100000000,%rax
    db89:       00 00 00 
    db8c:       55                      push   %rbp
    db8d:       53                      push   %rbx
    db8e:       48 89 fb                mov    %rdi,%rbx
    db91:       48 83 ec 30             sub    $0x30,%rsp
    db95:       f0 48 0f c1 07          lock xadd %rax,(%rdi)
    db9a:       48 8d 35 5f ff ff ff    lea    -0xa1(%rip),%rsi        # db00 
<__sem_wait_cleanup>
    dba1:       49 bc ff ff ff ff fe    movabs $0xfffffffeffffffff,%r12
    dba8:       ff ff ff 
    dbab:       48 8d 6c 24 10          lea    0x10(%rsp),%rbp
    dbb0:       48 89 fa                mov    %rdi,%rdx
    dbb3:       48 89 04 24             mov    %rax,(%rsp)
    dbb7:       48 89 ef                mov    %rbp,%rdi
    dbba:       e8 b1 04 00 00          callq  e070 <_pthread_cleanup_push>
    dbbf:       48 8b 04 24             mov    (%rsp),%rax
    dbc3:       85 c0                   test   %eax,%eax
    ....

So os::is_first_C_frame returns earlier. To support walking pthread library, I 
don't think it requires huge efforts, though.

-------------

PR: https://git.openjdk.java.net/jdk/pull/7833

Reply via email to