我有一个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必须是第一行中的J9VMThread
,j9thread_t
或java/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
答案 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 1
对0x00000000055E5170
,Thread 2
,Thread 3
和Thread 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
中,因此我不喜欢它。
这仅仅是观察。我仍然不知道哪个十六进制代码意味着什么,以及J9VMThread
,j9thread_t
,java/lang/Thread
和native thread id
在内部有何不同意义。仍然可以理解任何解释他的资源/参考资料。