Demangling Java symbols on Solaris 11.3

I was investigating a Java application problem on a SPARC server running Oracle Solaris 11.3 SRU 18 and was having trouble understanding the Java stack traces.

The symbols in a Java stack trace are not necessarily human readable:

$ pstack 17510/3
17510:    /weblogic/jdk1.8.0_121/bin/java -server -d64 -Xms32m -Xmx200m -XX:MaxP
------------  lwp# 3 / thread# 3  ---------------
 ffffffff6d04e3c4 lwp_cond_wait (10026fa48, 10026fa30, 0, 0)
 ffffffff432846e8 __1cCosNPlatformEventEpark6M_v_ (10026fa00, 233d40, 233c00, 10026fa30, ffffffff437cd708, 10026fa20) + 100
 ffffffff432165ec __1cHMonitorFIWait6MpnGThread_l_i_ (100272670, 10026e800, 0, 8, 0, 0) + a4
 ffffffff432174e0 __1cHMonitorEwait6Mblb_b_ (100272670, 10026e800, 0, 0, 1, 5b659c) + 378
 ffffffff42d34080 __1cNGCTaskManagerIget_task6MI_pnGGCTask__ (1002725f0, 0, 100278328, ffffffff435de094, ffffffff437cd708, 100278240) + a8
 ffffffff42d3675c __1cMGCTaskThreadDrun6M_v_ (10026e800, 0, 10040a360, ffffffff436554a0, ffffffff438dd6cd, 3d8) + e4
 ffffffff43275f50 java_start (10026e800, 228000, 228344, 194800, ffffffff437cd708, ffffffff42be6558) + 388
 ffffffff6d04931c _lwp_start (0, 0, 0, 0, 0, 0)


It is expected that c++filt can demangle the Java symbols, but I found two versions and wasn't sure which to use.

# pkg search -l c++filt
INDEX      ACTION VALUE                               PACKAGE
basename   file   opt/developerstudio12.5/bin/c++filt pkg:/developer/developerstudio-125/c++@12.5-1.0.0.0
basename   file   usr/gnu/bin/c++filt                 pkg:/developer/gnu-binutils@2.23.1-0.175.3.0.0.30.0


The version of c++filt that comes with pkg:/developer/gnu-binutils@2.23.1-0.175.3.0.0.30.0 did NOT help: 

$ pstack 17510/3 | /usr/gnu/bin/c++filt
17510:    /weblogic/jdk1.8.0_121/bin/java -server -d64 -Xms32m -Xmx200m -XX:MaxP
------------  lwp# 3 / thread# 3  ---------------
 ffffffff6d04e3c4 lwp_cond_wait (10026fa48, 10026fa30, 0, 0)
 ffffffff432846e8 __1cCosNPlatformEventEpark6M_v_ (10026fa00, 233d40, 233c00, 10026fa30, ffffffff437cd708, 10026fa20) + 100
 ffffffff432165ec __1cHMonitorFIWait6MpnGThread_l_i_ (100272670, 10026e800, 0, 8, 0, 0) + a4
 ffffffff432174e0 __1cHMonitorEwait6Mblb_b_ (100272670, 10026e800, 0, 0, 1, 5b659c) + 378
 ffffffff42d34080 __1cNGCTaskManagerIget_task6MI_pnGGCTask__ (1002725f0, 0, 100278328, ffffffff435de094, ffffffff437cd708, 100278240) + a8
 ffffffff42d3675c __1cMGCTaskThreadDrun6M_v_ (10026e800, 0, 10040a360, ffffffff436554a0, ffffffff438dd6cd, 3d8) + e4
 ffffffff43275f50 java_start (10026e800, 228000, 228344, 194800, ffffffff437cd708, ffffffff42be6558) + 388
 ffffffff6d04931c _lwp_start (0, 0, 0, 0, 0, 0)

The version of c++filt that comes with Oracle Developer Studio successfully demangled the symbols:

$ pstack 17510/3 | /opt/developerstudio12.5/bin/c++filt
17510:    /weblogic/jdk1.8.0_121/bin/java -server -d64 -Xms32m -Xmx200m -XX:MaxP
------------  lwp# 3 / thread# 3  ---------------
 ffffffff6d04e3c4 lwp_cond_wait (10026fa48, 10026fa30, 0, 0)
 ffffffff432846e8 void os::PlatformEvent::park() (10026fa00, 233d40, 233c00, 10026fa30, ffffffff437cd708, 10026fa20) + 100
 ffffffff432165ec int Monitor::IWait(Thread*,long) (100272670, 10026e800, 0, 8, 0, 0) + a4
 ffffffff432174e0 bool Monitor::wait(bool,long,bool) (100272670, 10026e800, 0, 0, 1, 5b659c) + 378
 ffffffff42d34080 GCTask*GCTaskManager::get_task(unsigned) (1002725f0, 0, 100278328, ffffffff435de094, ffffffff437cd708, 100278240) + a8
 ffffffff42d3675c void GCTaskThread::run() (10026e800, 0, 10040a360, ffffffff436554a0, ffffffff438dd6cd, 3d8) + e4
 ffffffff43275f50 java_start (10026e800, 228000, 228344, 194800, ffffffff437cd708, ffffffff42be6558) + 388
 ffffffff6d04931c _lwp_start (0, 0, 0, 0, 0, 0)


Now, back to solving the actual problem that I was investigating...

Comments:

Post a Comment:
  • HTML Syntax: NOT allowed
About

Jeff Taylor-Oracle

Search


Archives
« April 2017
SunMonTueWedThuFriSat
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
21
22
23
24
25
26
27
28
29
30
      
Today