RFR: 8283147: Include NonJavaThread stacktrace during thread dump [v3]
David Holmes
dholmes at openjdk.java.net
Thu Mar 17 01:58:44 UTC 2022
On Wed, 16 Mar 2022 07:48:42 GMT, Yi Yang <yyang at openjdk.org> wrote:
>> 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 at 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 at 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.
@kelthuzadx I do not agree with this enhancement request. I don't think it is the job of jcmd/jstack to do this. Those tools are concerned with application introspection not VM debugging.
-------------
PR: https://git.openjdk.java.net/jdk/pull/7833
More information about the hotspot-dev
mailing list