RFR(S) 8021335: Missing synchronization when reading counters for live threads and peak thread count
dean.long at oracle.com
dean.long at oracle.com
Thu Oct 18 00:38:14 UTC 2018
Thanks JC!
dl
On 10/17/18 5:06 PM, JC Beyler wrote:
> Hi Dean,
>
> The new webrev looks much better :) LGTM (not a reviewer though :-)).
>
> Thanks,
> Jc
> On Wed, Oct 17, 2018 at 3:19 PM <dean.long at oracle.com
> <mailto:dean.long at oracle.com>> wrote:
>
> On 10/17/18 2:38 PM, Mandy Chung wrote:
>>
>>
>> On 10/17/18 2:13 PM, dean.long at oracle.com
>> <mailto:dean.long at oracle.com> wrote:
>>> On 10/17/18 1:41 PM, Mandy Chung wrote:
>>>>
>>>>
>>>> On 10/16/18 7:33 PM, David Holmes wrote:
>>>>> Hi Dean,
>>>>>
>>>>> Thanks for tackling this.
>>>>>
>>>>> I'm still struggling to fully grasp why we need both the
>>>>> PerfCounters and the regular counters. I get that we have to
>>>>> decrement the live counts before ensure_join() has allowed
>>>>> Thread.join() to return, to ensure that if we then check the
>>>>> number of threads it has dropped by one. But I don't
>>>>> understand why that means we need to manage the thread count
>>>>> in two parts. Particularly as now you don't use the
>>>>> PerfCounter to return the live count, so it makes me wonder
>>>>> what role the PerfCounter is playing as it is temporarily
>>>>> inconsistent with the reported live count?
>>>>
>>>> Perf counters were added long time back in JDK 1.4.2 for
>>>> performance measurement before java.lang.management API. One
>>>> can use jstat tool to monitor VM perf counters of a running
>>>> VM. One could look into the possibility of deprecating these
>>>> counters and remove them over time.
>>>>
>>>>> On 17/10/2018 9:43 AM, dean.long at oracle.com
>>>>> <mailto:dean.long at oracle.com> wrote:
>>>>> New webrev:
>>>>>
>>>>> http://cr.openjdk.java.net/~dlong/8021335/webrev.4/
>>>>> <http://cr.openjdk.java.net/%7Edlong/8021335/webrev.4/>
>>>>
>>>> When the perf counters are updated when a thread is
>>>> added/removed, it's holding Threads_lock. Are the asserts in
>>>> ThreadService::remove_thread necessary?
>>>>
>>>
>>> Not really. They were intended to catch the case where the
>>> atomic counters weren't decremented for some reason, not for the
>>> perf counters.
>>> Should I remove them?
>>>
>>
>> Hmm... when remove_thread is called but decrement_thread_counts
>> has not been called. It's a bug in thread accounting. It
>> happens to have the perf counters that can be compared to
>> assert. It seems not obvious. Setting the perf counters same
>> values as _atomic_threads_count and _atomic_daemon_threads_count
>> makes sense to me.
>>
>> I would opt for removing the asserts but I can't think of an
>> alternative how to catch the issue you concern about.
>>
>>>> For clarify, I think we could simply set _live_threads_count to
>>>> the value of _atomic_threads_count and set
>>>> _daemon_threads_count to the value of _atomic_daemon_threads_count.
>>>>
>>>
>>> I think that works, even inside decrement_thread_counts()
>>> without holding the Threads_lock. If you agree, I'll make that
>>> change.
>>>
>> +1
>>
>
> New webrevs, full and incremental:
>
> http://cr.openjdk.java.net/~dlong/8021335/webrev.6/
> <http://cr.openjdk.java.net/%7Edlong/8021335/webrev.6/>
> http://cr.openjdk.java.net/~dlong/8021335/webrev.6.diff/
> <http://cr.openjdk.java.net/%7Edlong/8021335/webrev.6.diff/>
>
> I like it better without all the asserts too.
>
> dl
>
>> Mandy
>
>
>
> --
>
> Thanks,
> Jc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20181017/088148e0/attachment.html>
More information about the serviceability-dev
mailing list