RFR(L) 8237354: Add option to jcmd to write a gzipped heap dump
David Holmes
david.holmes at oracle.com
Wed Feb 12 03:22:52 UTC 2020
As this is a decades old FAQ ...
On 12/02/2020 8:50 am, David Holmes wrote:
> On 11/02/2020 10:55 pm, Yasumasa Suenaga wrote:
>> Hi Ralf,
>>
>> On 2020/02/11 0:33, Schmelter, Ralf wrote:
>>> Hi Yasumasa,
>>>
>>>> You can use `DCmdArgument<jlong>` for -gz option.
>>>
>>> That is what I originally tried. But then you always have to supply a
>>> compression level (just specifying -gz doesn't work). Since I would
>>> expect most users never caring about the compression level, I
>>> switched to a string option, which can handle this pattern.
>>
>> I think you can modify DCmdArgument<jlong>::parse_value() to allow the
>> operation without argument.
>> Or you can add new impl function for integer types which can handle
>> default value.
>>
>>
>>>> _nr_of_threads, _id_to_write, _current in CompressionBackend should
>>>> be added `volatile` at least.
>>>
>>> I don't think that is needed. Apart from the initialization, they are
>>> only changed under lock protection.
>>
>> I concerned with compiler optimization.
>> They are class members and they are used in `while(true)` loop.
>> Of course the problem would not appear in all C++ compiler, but I
>> guess it is more safely if `volatile` is added.
>
> As long as the variable is only accessed under the lock then volatile is
> not needed. If a compiler hoisted accesses outside of locked regions
> then all MT code could be broken.
https://danluu.com/threads-faq/#Q56
And the same applies for non-POSIX platform compilers.
Cheers,
David
-----
> David
> -----
>
>
>>
>>>> BTW how much processing time is different between single threaded
>>>> and multi threaded?
>>>
>>> I've benchmarked an example, which creates a ~31 GB uncompressed
>>> hprof file, with a VM which doesn't use any background threads. Here
>>> are the size of the create files, the compression level and the time
>>> spend:
>>>
>>> Uncompressed, 31.6 G, 71 sec
>>> gzipped level 1, 7.57 G, 463 sec (x6.5)
>>> gzipped level 3, 7.10 G, 609 sec (x8.6)
>>> gzipped level 6, 6.49 G, 1415 sec (x19.9)
>>>
>>> So even the fastest gzip compression makes writing the dump at least
>>> 5 times as slow.
>>>
>>>> Also I want to know what number is set to ParallelGCThreads.
>>>> ParallelGCThreads seems to affect to thread num for GZip compression.
>>>
>>> Originally, I've tried to use the WorkGang (CollectedHeap::
>>> get_safepoint_workers()) of the GC to do the work. But this wouldn't
>>> work because Shenandoah could not iterate the heap from a worker
>>> thread. So I've opted to start the needed threads itself for the time
>>> of the heap dump. I've used ParallelGCThreads as the maximum number
>>> of threads, since this is what would be used for a GC too. So it
>>> should not clog up the machine more than a GC. Maybe it would be even
>>> better to additionally limit the threads by the compression level.
>>
>> Thanks!
>>
>> Yasumasa (ysuenaga)
>>
>>
>>> Best regards,
>>> Ralf Schmelter
>>>
>>> -----Original Message-----
>>> From: Yasumasa Suenaga <suenaga at oss.nttdata.com>
>>> Sent: Samstag, 8. Februar 2020 14:46
>>> To: Schmelter, Ralf <ralf.schmelter at sap.com>; OpenJDK Serviceability
>>> <serviceability-dev at openjdk.java.net>
>>> Cc: yasuenag at gmail.com
>>> Subject: Re: RFR(L) 8237354: Add option to jcmd to write a gzipped
>>> heap dump
>>>
>>> Hi Ralf,
>>>
>>>
>>> - diagnosticCommand.cpp
>>> You can use `DCmdArgument<jlong>` for -gz option.
>>> If you want to use lesser type (e.g. int, unsigned char), I guess
>>> you need to modify GenDCmdArgument class.
>>>
>>> - heapDumper.cpp
>>> _nr_of_threads, _id_to_write, _current in CompressionBackend
>>> should be added `volatile` at least.
>>> (Other values need to be checked)
>>>
>>>
>>> BTW how much processing time is different between single threaded and
>>> multi threaded?
>>> Also I want to know what number is set to ParallelGCThreads.
>>> ParallelGCThreads seems to affect to thread num for GZip compression.
>>>
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
More information about the serviceability-dev
mailing list