[10] RFR: 8185796: jstack and clhsdb jstack should show lock objects
Yasumasa Suenaga
yasuenag at gmail.com
Fri Aug 11 09:58:41 UTC 2017
Hi Jini,
Thank you for your suggestion.
> This is helpful, but looks like 'locked' is printed even when a thread
> is waiting for the monitor entry, or has unlocked a lock.
IMHO we have to implement getPendingMonitor() and print_lock_info() in
JavaVFrame.java:
http://hg.openjdk.java.net/jdk10/hs/hotspot/file/52f2a3a13ed1/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/runtime/JavaVFrame.java#l48
I guess it is difficult, so we need more time.
> It would also be great if you could
> add a test case or modify an existing test case to test this along with
> the rest of your changes.
I think so, but I guess it is difficult.
For example, test for CLHSDB command is provided as test/serviceability/sa/TestPrintMdo.java .
But target process seems to be fixed to "LingeredApp".
Can we change it to another program which generates lock contention?
Thanks,
Yasumasa
On 2017/08/07 16:19, Jini George wrote:
> Hi Yasumasa,
>
> This is helpful, but looks like 'locked' is printed even when a thread
> is waiting for the monitor entry, or has unlocked a lock. For a simple
> test program, we would have:
>
> "Thread-1" #11 prio=5 tid=0x00007f3938450000 nid=0x6be4 waiting for
> monitor entry [0x00007f3915010000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> JavaThread state: _thread_blocked
> - ThreadLockTest.run() @bci=5, line=6 (Interpreted frame)
> - locked <0x000000072e96c490> (a java.lang.Class)
> - java.lang.Thread.run() @bci=11, line=844 (Interpreted frame)
>
>
> "Thread-0" #10 prio=5 tid=0x00007f39383b7800 nid=0x6be3 waiting on
> condition [0x00007f3915111000]
> java.lang.Thread.State: TIMED_WAITING (sleeping)
> JavaThread state: _thread_blocked
> - java.lang.Thread.sleep(long) @bci=0 (Interpreted frame)
> - ThreadLockTest.run() @bci=8, line=6 (Interpreted frame)
> - locked <0x000000072e96c490> (a java.lang.Class)
> - java.lang.Thread.run() @bci=11, line=844 (Interpreted frame)
>
> The corresponding output from the non SA jstack is as follows:
>
> "Thread-1" #11 prio=5 os_prio=0 tid=0x00007f3938450000 nid=0x6be4
> waiting for monitor entry [0x00007f3915010000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> JavaThread state: _thread_blocked
> Thread: 0x00007f3938450000 [0x6be4] State: _at_safepoint
> _has_called_back 0 _at_poll_safepoint 0
> JavaThread state: _thread_blocked
> at ThreadLockTest.run(ThreadLockTest.java:6)
> -waiting to lock <0x000000072e96c490> (a java.lang.Class for
> ThreadLockTest)
> at java.lang.Thread.run(java.base/Thread.java:844)
>
> Locked ownable synchronizers:
> - None
>
> "Thread-0" #10 prio=5 os_prio=0 tid=0x00007f39383b7800 nid=0x6be3
> waiting on condition [0x00007f3915111000]
> java.lang.Thread.State: TIMED_WAITING (sleeping)
> JavaThread state: _thread_blocked
> Thread: 0x00007f39383b7800 [0x6be3] State: _at_safepoint
> _has_called_back 0 _at_poll_safepoint 0
> JavaThread state: _thread_blocked
> at java.lang.Thread.sleep(java.base/Native Method)
> at ThreadLockTest.run(ThreadLockTest.java:6)
> - locked <0x000000072e96c490> (a java.lang.Class for
> ThreadLockTest)
> at java.lang.Thread.run(java.base/Thread.java:844)
>
> Locked ownable synchronizers:
> - None
>
> I think the various cases as seen in javaVFrame::print_lock_info_on()
> would have to be dealt with in SA. It would also be great if you could
> add a test case or modify an existing test case to test this along with
> the rest of your changes.
>
> Thanks,
> Jini (Not a (R)eviewer).
>
>
> On 8/3/2017 8:13 PM, Yasumasa Suenaga wrote:
>> Hi all,
>>
>> Thread dump shows lock objects, however jstack jhsdb and jstack in
>> CLHSDB are not show them.
>> They are very useful for checking monitors. So jstack mode should show
>> them.
>>
>> I uploaded webrev. Could you review it?
>>
>> http://cr.openjdk.java.net/~ysuenaga/JDK-8185796/webrev.00/
>>
>> This change prints locked stack looks like:
>>
>> * jhsdb jstack
>> ----------------
>> "main" #1 prio=5 tid=0x00007f1844018800 nid=0xe7f0 waiting on
>> condition [0x00007f184df31000]
>> java.lang.Thread.State: TIMED_WAITING (sleeping)
>> JavaThread state: _thread_blocked
>> - java.lang.Thread.sleep(long) @bci=0 (Interpreted frame)
>> - LongLock.main(java.lang.String[]) @bci=8, line=4 (Interpreted frame)
>> - locked <0x00000000dfc13b28> (a java.lang.Class)
>> ----------------
>>
>> * jstack in CLHSDB
>> ----------------
>> "main" #1 prio=5 tid=0x00007f1844018800 nid=0xe7f0 waiting on
>> condition [0x00007f184df31000]
>> java.lang.Thread.State: TIMED_WAITING (sleeping)
>> JavaThread state: _thread_blocked
>> - java.lang.Thread.sleep(long) @bci=0 (Interpreted frame)
>> - LongLock.main(java.lang.String[]) @bci=8, line=4 (Interpreted frame)
>> - locked <0x00000000dfc13b28> (a java.lang.Class)
>> ----------------
>>
>>
>> I cannot access JPRT.
>> So I need a sponsor.
>>
>>
>> Thanks,
>>
>> Yasumasa
>>
>>
>
>
More information about the serviceability-dev
mailing list