RFR(L) 8237354: Add option to jcmd to write a gzipped heap dump

David Holmes david.holmes at oracle.com
Wed Mar 18 06:43:22 UTC 2020


On 18/03/2020 4:39 pm, Schmelter, Ralf wrote:
> Hi David,
> 
>>   However I'm not clear how this solves  the problem of destroying
>> the monitor while it can still be being accessed - is the dumping
>> occurring at a safepoint in the WorkGang threads?
> 
> Because when the run_task() method returns, I can be sure none
> of the work gang threads still use the mutex. They have to exit the
> thread_loop() method to finish the task. And by exiting the method
> they have released the mutex.

All of which is happening via VM_HeapDumper::doit().

Got it.

Thanks,
David


> Best regards,
> Ralf
> 
> 
> 
> 
> 
> 
> From: David Holmes <david.holmes at oracle.com>
> 
> Sent: Wednesday, March 18, 2020 6:11 AM
> 
> To: Schmelter, Ralf <ralf.schmelter at sap.com>; Ioi Lam <ioi.lam at oracle.com>; Langer, Christoph <christoph.langer at sap.com>; Yasumasa Suenaga <suenaga at oss.nttdata.com>; serguei.spitsyn at oracle.com <serguei.spitsyn at oracle.com>; hotspot-runtime-dev at openjdk.java.net
>   runtime <hotspot-runtime-dev at openjdk.java.net>
> 
> Cc: serviceability-dev at openjdk.java.net <serviceability-dev at openjdk.java.net>
> 
> Subject: Re: RFR(L) 8237354: Add option to jcmd to write a gzipped heap dump
> 
>   
> 
> 
> Hi Ralf,
> 
> 
> 
> On 13/03/2020 9:43 pm, Schmelter, Ralf wrote:
> 
>> Hi,
> 
>>
> 
>> I have updated the webrev:
> http://cr.openjdk.java.net/~rschmelter/webrevs/8237354/webrev.1/
> 
>>
> 
>> It has the following significant changes:
> 
>>
> 
>> - The jcmd now uses two separate flags. The -gz flag is now a boolean flag which toggles the compression  on/off. And the new -gz-level flag can be used to change the compression level. If tried to change the jlong flag coding to allow the old behavior (only
>   one flag, which acts both as a boolean flag and a jlong flag), but decided against it, since it changes the semantic of a jlong flag. And I don't expect the -gz-level flag to be used all that much.
> 
>>
> 
>> - I no longer use my own threads. Instead I use the WorkGang returned from CollectedHeap:: get_safepoint_workers(). This works fine, apart from Shenandoah GC, which runs into assertions when calling the CollectedHeap::object_iterate() method from a worker
>   thread. I'm not sure if the assertion is too strong, but since the GC is currently experimental, I switch back to single threading in this case (as would be the case for serial GC or epsilon GC). Using the worker threads removes the problems the original code
>   had regarding destruction of the monitor used.
> 
> 
> 
> I'm glad to see you are no longer using your own threads, and I
> 
> apologise that I have not yet been able to look further into the thread
> 
> lifecycle issues you encountered. However I'm not clear how this solves
> 
> the problem of destroying the monitor while it can still be being
> 
> accessed - is the dumping occurring at a safepoint in the WorkGang threads?
> 
> 
> 
> Thanks,
> 
> David
> 
> -----
> 
> 


More information about the serviceability-dev mailing list