Printing the compiler thread when the process gets a SIGQUIT

Christian Thalinger christian.thalinger at oracle.com
Thu Jan 9 10:45:57 PST 2014


[BCC’ing hotspot-runtime-dev]

On Jan 9, 2014, at 10:01 AM, Jeremy Manson <jeremymanson at google.com> wrote:

> On Wed, Jan 8, 2014 at 9:41 PM, David Holmes <david.holmes at oracle.com>wrote:
> 
>> Hi Jeremy,
>> 
>> 
>> On 9/01/2014 8:45 AM, Jeremy Manson wrote:
>> 
>>> Hi folks,
>>> 
>>> We've found it useful to have a complete list of threads when we handle
>>> a SIGQUIT.  Hotspot currently prints out the VM thread and the GC
>>> threads, but not the compiler threads.  Follows a patch to make it do
>>> this.  Any interest, or was there a reason that compiler thread printing
>>> was never implemented?

I’m confused.  Aren’t we already printing the compiler threads?

"C1 CompilerThread3" #8 daemon prio=9 os_prio=31 tid=0x00007fb9f5007000 nid=0x5403 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fb9f5006000 nid=0x5203 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

Compiler threads are Java threads:

class CompilerThread : public JavaThread {

so they use JavaThread::print_on.  Am I still missing something?

Although I agree that this output is misleading:

"VM Periodic Task Thread" os_prio=31 tid=0x00007fe39b00d800 nid=0x5803 waiting on condition 

Compiler thread printing unimplemented.

JNI global references: 109

Perhaps we should remove the CompileBroker printing logic.

>>> 
>> 
>> I think you'd need to ask the compiler folk rather than runtime folk so
>> cc'ing hotspot-dev to broaden the audience - and hopefully find a sponsor
>> for this. :)
>> 
> 
> Thanks.  I assumed it was a runtime / serviceability issue, but it being a
> compiler issue also makes sense.
> 
> Basically, this is for users who get information (like CPU usage) about
> threads from other sources, and are trying to figure out what those threads
> do in the JVM.  They can do a SIGQUIT and find out about application
> threads and VM threads and GC threads, but they then have these other,
> leftover threads with no visibility.  This patch clarifies matters, and is
> relatively straightforward, so it has been worthwhile having it.
> 
> 
> 
> 
>> Looking at the patch you use:
>> 
>> _name = NEW_C_HEAP_ARRAY(char, strlen(name) + 1, mtInternal);
>> 
>> whereas NamedThread uses:
>> 
>> _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
>> 
>> I don't know whether mtInternal or mtThread is the appropriate selection
>> here.
>> 
> 
> Presumably, the sponsor (or lack thereof) would know?
> 
> (Not sure whether I should delete the associated memory or not...  There
>>> seems to be very little cleanup from compiler threads, or attempt to
>>> shut them down.)
>>> 
>> 
>> I'd opt for doing the free in the destructor as NamedThread does.
>> 
>> 
> That was my inclination, but CompilerThread doesn't have a destructor.
> It's also been my experience that CompilerThreads are never shut down
> cleanly (JVMTI Compile events continue to be sent after JVM shutdown, which
> has resulted in my removing a lot of cleanup code from my own code).
> 
> Anyway, I'll wait for someone else to chime in.  (I can send the patch
> again, if people on hotspot-dev didn't get it the first time.)
> 
> Jeremy



More information about the hotspot-dev mailing list