哪个是javadumps中的线程ID?

时间:2015-10-07 10:42:41

标签: java

我有一个javadump文件,我必须分析。通常在javadumps中使用带前缀的名称tid:指定线程ID。但是在这个javadump中,我找不到tid:。那么以什么名称将线程id转储到这个特定的文件中?线程转储中必须包含线程ID的几行是:

3XMTHREADINFO      "WLMMonitorSleeper : 0" J9VMThread:0x0000000082586300, j9thread_t:0x00007FC3E0940D30, java/lang/Thread:0x00000000022D6160, state:CW, prio=5
3XMTHREADINFO1            (native thread ID:0x2EA7, native priority:0x5, native policy:UNKNOWN)
3XMTHREADINFO2            (native stack address range from:0x00007FC3AFE39000, to:0x00007FC3AFE7A000, size:0x41000)

(可以在this article中找到类似的javadump,它解释了如何分析线程转储,但仍然没有讨论线程ID的位置)

我猜测线程ID必须是第一行中的J9VMThreadj9thread_tjava/lang/Thread之一。但不确定。没有在线查找任何信息,包括在IBM的知识中心。如果其中一个是java线程id,那么另外两个是什么?请提供解释相同的在线参考。

有关此Java转储属于哪个java版本的详细信息,这些是来自同一文件的一些行:

0SECTION       GPINFO subcomponent dump routine
NULL           ================================
2XHOSLEVEL     OS Level         : Linux 2.6.32-279.el6.x86_64
2XHCPUS        Processors -
3XHCPUARCH       Architecture   : amd64
3XHNUMCPUS       How Many       : 2
3XHNUMASUP       NUMA is either not supported or has been disabled by user
NULL           
1XHERROR2      Register dump section only produced for SIGSEGV, SIGILL or SIGFPE.
NULL           
NULL           ------------------------------------------------------------------------
0SECTION       ENVINFO subcomponent dump routine
NULL           =================================
1CIJAVAVERSION JRE 1.6.0 Linux amd64-64 build 20120308_104898 (pxa6460_26sr1fp1-20120309_01(SR1 FP1))
1CIVMVERSION   VM build R26_Java626_SR1_FP1_20120308_1511_B104898
1CIJITVERSION  r11_20111028_21230ifx5
1CIGCVERSION   GC - R26_Java626_SR1_FP1_20120308_1511_B104898_CMPRSS

1 个答案:

答案 0 :(得分:0)

我从分析角度看。目前我觉得,我将使用J9VMThread。因为那是在同一个日志文件中使用的id。例如,在日志文件的LOCKS subcomponent dump routine中,有:

2LKMONINUSE      sys_mon_t:0x00007FC3BCD2D530 infl_mon_t: 0x00007FC3BCD2D5A8:
3LKMONOBJECT       org/apache/log4j/spi/RootLogger@0x00000000055E5170: Flat locked by "Thread 1" (0x000000008502FD00), entry count 1
3LKWAITERQ            Waiting to enter:
3LKWAITER                "Thread 2" (0x000000008445AF00)
3LKWAITER                "Thread 3" (0x0000000085046300)
3LKWAITER                "Thread 4" (0x000000008506CA00)
3LKWAITER                "Thread 5" (0x00000000846FB700)

这说Thread 10x00000000055E5170Thread 2Thread 3Thread 4已被阻止的Thread 5保持锁定。线程5的ID为0x000000008502FD00,锁定对象的ID为0x00000000055E5170。如果您在THREADS subcomponent dump routine中查看相应的主题详细信息,我们将通过以下方式找到这些锁定对象的ID和主题5的ID:

3XMTHREADBLOCK     Blocked on: org/apache/log4j/spi/RootLogger@0x00000000055E5170 Owned by: "WebContainer : 57" (J9VMThread:0x000000008502FD00, java/lang/Thread:0x000000000B7164B0)

java/lang/Thread:0x000000000B7164B0包含在上面一行中,但由于此ID未出现在LOCKS subcomponent dump routine中,因此我不喜欢它。

这仅仅是观察。我仍然不知道哪个十六进制代码意味着什么,以及J9VMThreadj9thread_tjava/lang/Threadnative thread id在内部有何不同意义。仍然可以理解任何解释他的资源/参考资料。