Ping - Re: RFR for JDK-8029346 LowMemoryTestConcMarkSweepGC.sh fails intermittently with timeout
Mandy Chung
mandy.chung at oracle.com
Wed Dec 18 18:42:49 PST 2013
On 12/18/2013 6:00 PM, Tristan Yan wrote:
> Hi Everyone
> This is a reminder. Can anyone help to review this code change.
>
> http://cr.openjdk.java.net/~tyan/JDK-8029346/webrev.00/
> <http://cr.openjdk.java.net/%7Etyan/JDK-8029346/webrev.00/>
>
Thanks for the cleanup. Looks okay. I spot some minor cleanup if you
don't mind fixing them.
line 48: List -> List<MemoryPoolMXBean>
line 159: a space is missing after "//" and before "Force"
line 192: List -> List<Object>
line 236: the sweep object is no longer needed.
I suggest to include the phase number in the trace to help
troubleshooting in the future like this:
225 System.out.println("AllocatorThread is doing task " + i + " phase " + phaser.getPhase());
252 System.out.println("SweepThread is doing task " + i + " phase " + phaser.getPhase());
Also add a trace to print after it advances to the next phase in line 228 and 258.
Send me the new patch and I can sponsor your fix.
Mandy
> Description:
> 1. Fix the bug as below described.
> 2. Change the shell script tests to Java tests.
> 3. Using concurrent Phaser sync thread to replace old object sync
>
> Thank you.
> Tristan.
>
> On 12/17/2013 04:38 PM, Tristan Yan wrote:
>> Thanks for the suggestion. Mandy
>>
>> Hi Everyone
>> Please review code fix for JDK-8029346
>>
>> http://cr.openjdk.java.net/~tyan/JDK-8029346/webrev.00/
>> <http://cr.openjdk.java.net/%7Etyan/JDK-8029346/webrev.00/>
>>
>> Description:
>> 1. Fix the bug as below described.
>> 2. Change the shell script tests to Java tests.
>> 3. Using concurrent Phaser sync thread to replace old object sync
>>
>> Thank you very much.
>> Tristan
>>
>>
>> On 12/17/2013 03:20 AM, Mandy Chung wrote:
>>> Hi Tristan,
>>>
>>> Thanks for looking into this test failure.
>>>
>>> listenerInvoked is accessed by multiple threads but not volatile.
>>> That is certainly an issue. The test was written long ago prior to
>>> j.u.concurrent. Can you also replace wait_or_notify with
>>> j.u.concurrent (I think Semaphore or Phaser should do it)?
>>>
>>> This is probably out of scope of this bug. I suggest to remove the
>>> LowMemoryTest*.sh tests and replace them by adding @run in
>>> LowMemoryTest.java.
>>>
>>> Mandy
>>>
>>> On 12/12/2013 9:12 AM, Tristan Yan wrote:
>>>> Hi Everyone
>>>> I am working on bug https://bugs.openjdk.java.net/browse/JDK-8029346
>>>>
>>>> Root cause for this bug is in CMS mode; gc could happen when
>>>> AllocatorThread is allocating spaces. in that case. objectPool
>>>> won't be added two object arrays as it's supposed to have. Also in
>>>> that case. no clear and gc will be invoked in SweepThread. Which
>>>> means memory used is still bigger than threshold. According the
>>>> java doc. Subsequent crossing of the usage threshold value does not
>>>> cause further notification until the memory usage has returned to
>>>> become less than the usage threshold value. That's the reason why
>>>> next notification will never comes.
>>>>
>>>> Suggested fix is making below change in doTask, make sure in every
>>>> loop two object arrays are added objectPool and gc will be invoked
>>>> in SweepThread.
>>>> change
>>>> while (!listenerInvoked) {
>>>> into
>>>> while (!listenerInvoked || mpool.getUsage().getUsed() <
>>>> mpool.getUsageThreshold()) {
>>>>
>>>> Please let me know if you have any comments or suggestions.
>>>>
>>>> Thank you
>>>>
>>>> Tristan
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20131218/7e8dfd39/attachment-0001.html
More information about the serviceability-dev
mailing list