RFR: 8343741: SA jstack --mixed should print information about VM locks

Leonid Mesnik lmesnik at openjdk.org
Fri Nov 15 20:55:06 UTC 2024


Hi 
Could you please "pre-review" this fix that add locks information. I want to get some preliminary feedback before completing the changes.

Here is the motivation for this rfe and explanation why I add it into SA now.

The information about current owners of Hotspot Mutex is often very useful for dealock investigations.

The jcmd usually doesn't work because VM can't reach or exit safepoints. So it doesn't respond to jcmd.

The SA 'jstack --mixed' provides information about stacktraces on Java and non-Java Threads. So having information about locks along with stack traces might significantly help to identify issues.

The gdb allows to provide stacktraces, but the debug symbols are required to get info about locks. These symbols are often absent during execution.
Also the debugger solution is OS specifc.

The significant part of fix is refacotorrng of mutex_array to be vmStructs compatible.

The adding support of non-JavaThreads into SA might be implemented later to obtain more info about their names. 
The example of output:

[2024-11-06T21:32:48.897414435Z] Gathering output for process 1620563
Attaching to process ID 1620533, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24-internal-adhoc.lmesnik.open
Deadlock Detection:

No deadlocks found.

Internal VM Mutex Threads_lock is owned by Unknnown thread (Might be non-Java Thread) with address: 0x00007f8cf825b190
Internal VM Mutex Compile_lock is owned by LockerThread with address: 0x00007f8cf8309a00
----------------- 1620559 -----------------
"C1 CompilerThread4" #28 daemon prio=9 tid=0x00007f8c300566a0 nid=1620559 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   JavaThread state: _thread_blocked
0x00007f8cff11e88d      syscall + 0x1d
0x00007f8cfe6c99de      LinuxWaitBarrier::wait(int) + 0x8e
0x00007f8cfe2be409      SafepointMechanism::process(JavaThread*, bool, bool) + 0x79
0x00007f8cfd53ea91      ThreadInVMfromNative::ThreadInVMfromNative(JavaThread*) + 0xc1
0x00007f8cfd534a00      ciEnv::cache_jvmti_state() + 0x30
0x00007f8cfd679614      CompileBroker::invoke_compiler_on_method(CompileTask*) + 0x204
0x00007f8cfd67adc8      CompileBroker::compiler_thread_loop() + 0x5c8
0x00007f8cfdb4426c      JavaThread::thread_main_inner() + 0xcc
0x00007f8cfe5a0bbe      Thread::call_run() + 0xbe
0x00007f8cfe16813b      thread_native_entry(Thread*) + 0x12b
.....
----------------- 1620554 -----------------
"LockerThread" #31 prio=5 tid=0x00007f8cf8309a00 nid=1620554 waiting on condition [0x00007f8cc1dfe000]
   java.lang.Thread.State: RUNNABLE
   JavaThread state: _thread_blocked
0x00007f8cff091117      __GI___futex_abstimed_wait_cancelable64 + 0xe7
0x00007f8cff093a41      __GI___pthread_cond_wait + 0x211

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

Commit messages:
 - years updated
 - fixed spaces
 - Merge branch 'master' of https://github.com/openjdk/jdk into sa-lock
 - Merge branch 'sa-lock' of https://github.com/lmesnik/jdk into sa-lock
 - Merge branch 'master' into sa-lock
 - spaces fixed
 - fixed product builds
 - updated test
 - ident
 - polish
 - ... and 10 more: https://git.openjdk.org/jdk/compare/c388455d...606dcc03

Changes: https://git.openjdk.org/jdk/pull/21943/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21943&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8343741
  Stats: 457 lines in 14 files changed: 383 ins; 69 del; 5 mod
  Patch: https://git.openjdk.org/jdk/pull/21943.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21943/head:pull/21943

PR: https://git.openjdk.org/jdk/pull/21943


More information about the serviceability-dev mailing list