jmx-dev RFR: 8020875 java/lang/management/ThreadMXBean/ResetPeakThreadCount.java fails intermittently

Jaroslav Bachorik jaroslav.bachorik at oracle.com
Wed Jul 24 01:40:46 PDT 2013


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 07/24/2013 10:38 AM, shanliang wrote:
> - ---> MBean.getThreadCount() = 7
> 
> ................
> 
> - ---> MBean.getThreadCount() = 6
> 
> I suppose that you added sleep between 2 calls, then there might be
> an issue with MBean.getThreadCount()

Actually I tried it with sleep for 10ms as well as without. It seems
that the natural latency between those 2 calls is enough to get the
thread count updated to the actual value.

- -JB-

> 
> Shanliang
> 
> Jaroslav Bachorik wrote: On 07/24/2013 09:21 AM, shanliang wrote:
> 
>>>> Just to be a test, after terminated 8 threads and checked
>>>> their states by calling Thread.join() (must be same to 
>>>> Thread.getState()), DO sleep sometime and then call 
>>>> mbean.getThreadCount(), if it reports a right number, then we
>>>> may need to verify mbean.getThreadCount() method.
>>>> 
> 
> The result is:
> 
> Thread: Thread[Signal Dispatcher,9,system] Thread:
> Thread[Finalizer,8,system] Thread: Thread[worker-12,5,main] Thread:
> Thread[Reference Handler,10,system] Thread: Thread[main,5,main] 
> Thread: Thread[worker-13,5,main] ---> MBean.getThreadCount() = 7 
> Thread(1): Thread[Signal Dispatcher,9,system] Thread(1):
> Thread[Finalizer,8,system] Thread(1): Thread[worker-12,5,main] 
> Thread(1): Thread[Reference Handler,10,system] Thread(1):
> Thread[main,5,main] Thread(1): Thread[worker-13,5,main] --->
> MBean.getThreadCount() = 6
> 
> -JB-
> 
> 
> 
>>>> Shanliang
>>>> 
>>>> Jaroslav Bachorik wrote:
>>>> 
>>>>> On Wed 24 Jul 2013 08:20:56 AM CEST, Mandy Chung wrote:
>>>>> 
>>>>> 
>>>>>> On 7/24/2013 2:09 PM, Daniel Fuchs wrote:
>>>>>> 
>>>>>> 
>>>>>>> On 7/24/13 8:01 AM, Mandy Chung wrote:
>>>>>>> 
>>>>>>> 
>>>>>>>> I am catching up on this thread....
>>>>>>>> 
>>>>>>>> The thread count counts Java threads that are not
>>>>>>>> hidden. I believe all VM internal threads are hidden
>>>>>>>> from external API. This test runs in othervm mode and
>>>>>>>> AFAICT the thread count is expected to be
>>>>>>>> deterministic.  I don't expect the VM will start and
>>>>>>>> terminate any thread any time.
>>>>>>>> 
>>>>>>>> I agree with David that we should diagnose why there
>>>>>>>> is one additional thread started before the reset.
>>>>>>>> If it is the LogManager$Cleaner thread, like David
>>>>>>>> said, the VM is shutting down while the test is still
>>>>>>>> running which doesn't quite make sense.
>>>>>>>> 
>>>>>>>> 
>>>>>>> I think that Shanliang's suspicion that a thread might
>>>>>>> be still alive if unscheduled just after having called
>>>>>>> its barrier.signal() is a very good suggestion. I would
>>>>>>> advise calling thread.join() on all threads in
>>>>>>> terminateThreads, just to make sure they are all really
>>>>>>> dead and not in some comatose state... If Shanliang is
>>>>>>> right then the test would be failing because some of
>>>>>>> the threads we think are dead are not actually dead yet
>>>>>>> - and not because of some new VM thread that nobody can
>>>>>>> see :-)
>>>>>>> 
>>>>>>> 
>>>>>> Thanks for pointing that out.
>>>>>> 
>>>>>> I agree that the test should be changed to call
>>>>>> Thread.join(). There may be other java.lang.management
>>>>>> tests that should also be fixed to call Thread.join.
>>>>>> 
>>>>>> 
>>>>> I've tried using Thread.join() but I am still getting the
>>>>> thread count discrepancy.
>>>>> 
>>>>> Specifically: 1. 10 worker threads have been successfully
>>>>> started - mben.getThreadCount() reports 14 and 
>>>>> Thread.getAllStackTraces() returns 14 items --- Thread: 
>>>>> Thread[Signal Dispatcher,9,system] Thread: 
>>>>> Thread[worker-5,5,main] Thread: Thread[worker-7,5,main]
>>>>> Thread: Thread[worker-9,5,main] Thread:
>>>>> Thread[worker-12,5,main] Thread: Thread[worker-11,5,main]
>>>>> Thread: Thread[Reference Handler,10,system] Thread:
>>>>> Thread[main,5,main] Thread: Thread[worker-10,5,main]
>>>>> Thread: Thread[worker-8,5,main] Thread: 
>>>>> Thread[Finalizer,8,system] Thread: Thread[worker-6,5,main]
>>>>> Thread: Thread[worker-13,5,main] Thread:
>>>>> Thread[worker-4,5,main] --- 2. Terminating 8 threads 3.
>>>>> After the threads have been terminated (waiting on
>>>>> Thread.join() for them to die) - mbean.getThreadCount()
>>>>> reports 7 while Thread.getAllStackTraces() returns only 6
>>>>> items --- Thread: Thread[Signal Dispatcher,9,system]
>>>>> Thread: Thread[Finalizer,8,system] Thread: 
>>>>> Thread[worker-12,5,main] Thread: Thread[Reference 
>>>>> Handler,10,system] Thread: Thread[main,5,main] Thread: 
>>>>> Thread[worker-13,5,main] ---
>>>>> 
>>>>> This would almost point to mbean.getThreadCount() reporting
>>>>> a stale value. Is that possible?
>>>>> 
>>>>> -JB-
>>>>> 
>>>>> 
>>>>> 
>>>>>> Mandy
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
> 
>> 
> 
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJR75MOAAoJELSZyqhGiB1M1CgIAKcMQMTZlZqM6qFsI5nCc53Y
fHEFykf4792Qh/TgqDiyNbDCiTgY0TWoChUEJJEQvlho01TpJmKbkyqx5fNoNqjO
l94p073f4GsUSHR4exGmDjJkg87DCzhbhX3bZdwjfsxJHxup8qrXxpz4c5lyBHDH
ttoSasrcDIUh7cRoeqY7uWkIcnc8xI1cj7p3JlPUwB251eKzh15GZgMJhNKrn9N2
nhjpGywh3t/kwcsDVCibgBBOJ4ju55PRDZTyxH2R6o4fM+Twl80nZSaxUJiPUfEe
yDNFUxMfPcNH+jRAhRlmKRZtfHfYV/nwaj/eqCL8CDtluzVR+lraII81pg7OU+c=
=lqyg
-----END PGP SIGNATURE-----


More information about the serviceability-dev mailing list