G1 STW phases and FGC column in jstat

Tao Mao yiyeguhu at gmail.com
Wed Mar 2 00:27:03 UTC 2016


Hi,

Would adopting MiGC (minor) and MaGC (major) in jstat output make more
sense to cover all collectors' algorithms if we need a change here?

Thanks.
Tao Mao

On Tue, Mar 1, 2016 at 3:03 PM, Yasumasa Suenaga <yasuenag at gmail.com> wrote:

> Hi Kirk,
>
> It is also incorrect to count initial mark and remark in CMS as a FGC.
>>
>
> Though, how can we check execution of major collection without GC log?
> Should we add new PerfCounter for CGC (and add CGC column to jstat output)?
>
>
> Yasumasa
>
>
>
> On 2016/03/02 6:35, kirk at kodewerk.com wrote:
>
>> Hi,
>>
>> I think it is incorrect to count remark and cleanup as FGC. They are not
>> full collections. It is also incorrect to count initial mark and remark in
>> CMS as a FGC. It is unfortunate that this is counted this way.
>>
>> Regards,
>> Kirk
>>
>> On Mar 1, 2016, at 8:56 AM, Yasumasa Suenaga <yasuenag at gmail.com> wrote:
>>>
>>> Hi all,
>>>
>>> I wonder that STW phases (Remark and Cleanup) at G1 are not counted in
>>> jstat FGC column.
>>> For example, Initial Mark and Remark at CMS are counted as FGC.
>>>
>>> For consistency, I think that G1 STW phases should be counted as FGC.
>>> What do you think about it?
>>>
>>> If it is accepted, I will file it to JBS and will upload webrev.
>>>
>>>
>>> suggested fix:
>>> ----------------------
>>> diff -r 8a103ba9a7b2 src/share/vm/gc/g1/g1MonitoringSupport.cpp
>>> --- a/src/share/vm/gc/g1/g1MonitoringSupport.cpp        Mon Feb 29
>>> 22:54:24 2016 +0900
>>> +++ b/src/share/vm/gc/g1/g1MonitoringSupport.cpp        Tue Mar 01
>>> 23:43:30 2016 +0900
>>> @@ -103,7 +103,7 @@
>>>    //   name "collector.1".  In a generational collector this would be
>>> the
>>>    // old generation collection.
>>>    _full_collection_counters =
>>> -    new CollectorCounters("G1 stop-the-world full collections", 1);
>>> +    new CollectorCounters("G1 stop-the-world phase", 1);
>>>
>>>    // timer sampling for all counters supporting sampling only update the
>>>    // used value.  See the take_sample() method.  G1 requires both used
>>> and
>>> diff -r 8a103ba9a7b2 src/share/vm/gc/g1/vm_operations_g1.cpp
>>> --- a/src/share/vm/gc/g1/vm_operations_g1.cpp   Mon Feb 29 22:54:24 2016
>>> +0900
>>> +++ b/src/share/vm/gc/g1/vm_operations_g1.cpp   Tue Mar 01 23:43:30 2016
>>> +0900
>>> @@ -230,6 +230,8 @@
>>>    G1CollectedHeap* g1h = G1CollectedHeap::heap();
>>>    GCTraceTime(Info, gc) t(_printGCMessage, g1h->gc_timer_cm(),
>>> GCCause::_no_gc, true);
>>>    IsGCActiveMark x;
>>> +  SvcGCMarker sgcm(SvcGCMarker::OTHER);
>>> +  TraceCollectorStats tcs(g1h->g1mm()->full_collection_counters());
>>>    _cl->do_void();
>>> }
>>>
>>> ----------------------
>>>
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20160301/a5d3ecf9/attachment.html>


More information about the serviceability-dev mailing list