RFR: 8263572: Output from jstack mixed mode is misaligned [v2]

Chris Plummer cjplummer at openjdk.java.net
Fri Mar 19 19:48:40 UTC 2021


On Tue, 16 Mar 2021 06:09:25 GMT, Koichi Sakata <ksakata at openjdk.org> wrote:

>> When running jstack with mixed option, the output of the lines that doesn't have an address are misaligned as followings. 
>> 
>> $ sudo jhsdb jstack --mixed --pid 8281
>> ----------------- 8330 -----------------
>> "event-handler" #20 daemon prio=5 tid=0x00007f2384838490 nid=0x208a in Object.wait() [0x00007f23585ec000]
>>    java.lang.Thread.State: WAITING (on object monitor)
>>    JavaThread state: _thread_blocked
>> 0x00007f238da899f3      __pthread_cond_wait + 0x243
>> 0x00007f238c63a26b      os::PlatformEvent::park() + 0x8b
>> 0x00007f238c5e689d      ObjectMonitor::wait(long, bool, Thread*) + 0xfed
>> 0x00007f238ca1f1d6      ObjectSynchronizer::wait(Handle, long, Thread*) + 0x96
>> 0x00007f238c0b4d71      JVM_MonitorWait + 0x241
>> 0x00007f237cb246b7      java.lang.Object.wait(long) + 0xd7 (Native method)
>> 0x00007f2375777344      * java.lang.Object.wait() bci:2 line:338 (Compiled frame)
>> * com.sun.tools.jdi.EventQueueImpl.removeUnfiltered(long) bci:64 line:190 (Compiled frame)
>> * com.sun.tools.jdi.EventQueueImpl.remove(long) bci:18 line:97 (Interpreted frame)
>> 0x00007f2375009543      * com.sun.tools.jdi.EventQueueImpl.remove() bci:2 line:83 (Interpreted frame)
>> 
>> This pull request aligns the indentation. So It will be able to improve readability.
>> 
>> In this pull request the address part is filled with white spaces. The amount of space is calculated from VM's address size and lastly 2, which is the length of "0x", is added.
>> 
>> ### jtreg test
>> 
>> $ sudo make run-test TEST=serviceability/sa/TestJhsdbJstackMixed.java
>> 
>> $ cat ./jdk/build/linux-x86_64-server-fastdebug/test-results/jtreg_test_hotspot_jtreg_serviceability_sa_TestJhsdbJstackMixed_java/text/summary.txt
>> serviceability/sa/TestJhsdbJstackMixed.java  Passed. Execution successful
>> 
>> ### Output Confirmation
>> 
>> I checked the output on 64-bit and 32-bit JDK.
>> 
>> First, I ran JShell. Next, on another shell, I ran jstack with mixed option for the JShell process and checked the output.
>> 
>> #### Linux 64-bit JDK
>>  $ ./jdk/build/linux-x86_64-server-fastdebug/jdk/bin/jshell
>> |  Welcome to JShell -- Version 16-internal
>> |  For an introduction type: /help intro
>> 
>> jshell>
>> 
>> $ ./jdk/build/linux-x86_64-server-fastdebug/jdk/bin/jhsdb jstack --mixed --pid 19272
>> ...
>> ----------------- 19324 -----------------
>> "output reader" #21 daemon prio=5 tid=0x00007f2ae4783760 nid=0x4b7c runnable [0x00007f2a86efd000]
>>    java.lang.Thread.State: RUNNABLE
>>    JavaThread state: _thread_in_native
>> 0x00007f2aed5d2394      __libc_read + 0x44
>> 0x00007f2ac450f93b      Java_sun_nio_ch_SocketDispatcher_read0 + 0x2b
>> 0x00007f2adcb2045a      sun.nio.ch.SocketDispatcher.read0(java.io.FileDescriptor, long, int) + 0xfa (Native method)
>> 0x00007f2ad573e024      * sun.nio.ch.SocketDispatcher.read(java.io.FileDescriptor, long, int) bci:4 line:47 (Compiled frame)
>>                         * sun.nio.ch.NioSocketImpl.tryRead(java.io.FileDescriptor, byte[], int, int) bci:45 line:261 (Compiled frame)
>>                         * sun.nio.ch.NioSocketImpl.implRead(byte[], int, int) bci:99 line:312 (Compiled frame)
>>                         * sun.nio.ch.NioSocketImpl.read(byte[], int, int) bci:54 line:350 (Compiled frame)
>>                         * sun.nio.ch.NioSocketImpl$1.read(byte[], int, int) bci:7 line:803 (Compiled frame)
>>                         * java.net.Socket$SocketInputStream.read(byte[], int, int) bci:7 line:961 (Compiled frame)
>>                         * java.net.Socket$SocketInputStream.read() bci:8 line:956 (Compiled frame)
>>                         * java.io.FilterInputStream.read() bci:4 line:82 (Interpreted frame)
>> 0x00007f2ad50094fe      * jdk.jshell.execution.DemultiplexInput.run() bci:4 line:58 (Interpreted frame)
>> 0x00007f2ad5000d4a      <StubRoutines>
>> ...
>> 
>> #### Windows 32-bit JDK
>> $ ./jdk/build/windows-x86-server-fastdebug/jdk/bin/jhsdb.exe jstack --mixed --pid 78808
>> ...
>> ----------------- 29 -----------------
>> "output reader" #17 daemon prio=5 tid=0x2711c3b8 nid=0x13178 runnable [0x27d6f000]
>>    java.lang.Thread.State: RUNNABLE
>>    JavaThread state: _thread_in_native
>> 0x77ae2f5c      ntdll!NtWaitForSingleObject + 0xc
>> 0x6dc5cb18      mswsock!sethostname + 0xbdc8
>> 0x753cdecc      WS2_32!WSARecv + 0x11c
>> 0x6c0d35f8      nio!Java_sun_nio_ch_SocketDispatcher_read0 + 0x48
>> 0x02d15ee9      sun.nio.ch.SocketDispatcher.read0(java.io.FileDescriptor, long, int) + 0xa9 (Native method)
>> 0x02d16540      * sun.nio.ch.SocketDispatcher.read(java.io.FileDescriptor, long, int) bci:4 line:46 (Compiled frame)
>>                 * sun.nio.ch.NioSocketImpl.tryRead(java.io.FileDescriptor, byte[], int, int) bci:45 line:261 (Compiled frame)
>>                 * sun.nio.ch.NioSocketImpl.implRead(byte[], int, int) bci:99 line:312 (Compiled frame)
>>                 * sun.nio.ch.NioSocketImpl.read(byte[], int, int) bci:54 line:350 (Compiled frame)
>>                 * sun.nio.ch.NioSocketImpl$1.read(byte[], int, int) bci:7 line:803 (Compiled frame)
>>                 * java.net.Socket$SocketInputStream.read(byte[], int, int) bci:7 line:961 (Compiled frame)
>>                 * java.net.Socket$SocketInputStream.read() bci:8 line:956 (Compiled frame)
>>                 * java.io.FilterInputStream.read() bci:4 line:82 (Interpreted frame)
>> 0x02ac6804      * jdk.jshell.execution.DemultiplexInput.run() bci:4 line:58 (Interpreted frame)
>> 0x02ac0cdc      <StubRoutines>
>> ...
>
> Koichi Sakata has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix calculation for the length of white space

Marked as reviewed by cjplummer (Reviewer).

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

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


More information about the serviceability-dev mailing list