jmx-dev RFR 8020467: Inconsistency between usage.getUsed() and isUsageThresholdExceeded() with CMS Old Gen pool
Mandy Chung
mandy.chung at oracle.com
Thu Oct 24 12:33:08 PDT 2013
On 10/24/2013 7:01 AM, Jaroslav Bachorik wrote:
> Hi Mandy,
>
> On 24.10.2013 01:02, Mandy Chung wrote:
>>
>> On 10/23/2013 7:32 AM, Jaroslav Bachorik wrote:
>>> I've updated the patch. The GC is called even before the first attempt
>>> to get the pool memory usage and System.gc() is used to perform GC (no
>>> MXBean checks). This should simplify the change a bit.
>>>
>>> http://cr.openjdk.java.net/~jbachorik/8020467/webrev.02
>>
>> This change is okay. It will force GC once per each memory pool that
>> supports usage threshold (I think 3 memory pools) which is not a huge
>> issue. Perhaps a more reliable option is to make it an othervm test and
>> allocating large object and calling GC once before the verification.
>
> Running it as othervm might improve repeatbility but I don't quite
> follow the trick with large object. That would be effective for the
> oldgen pools only, I suppose? There were concerns raised during the
> review that other pools might be susceptible to the same timing
> related problems (theoretically).
This test was written before the samevm/agentvm support. In general we
want the tests to be reliable. You want the System.gc() call to reduce
the probability of the race such that the initially empty pool is being
filled with objects between getUsage() and isUsageThresholdExceeded()
methods are called but this has the assumption that there is some large
object allocated and get promoted to the old gen (not done in this test
though). The other possibility is that the old gen is cleared although
it might be rare in practice? Holding on a large object will ensure
that the old gen is always filled with something to make it more reliable.
> So, if you don't feel strongy about it I would leave the rest of the
> test as it is - that is calling System.gc() before checking the pool
> thresholds.
I just worry that this test will fail some day intermittently again.
Since in practice the runtime has space allocated, I think running it in
othervm would be adequate.
Mandy
More information about the serviceability-dev
mailing list