jstack again

David Holmes david.holmes at oracle.com
Fri Sep 14 01:57:41 PDT 2012


Hi Dmytro,

I'll see if I can fold this in to the priority change. No need for a 
test case.

Thanks,
David

On 14/09/2012 6:19 PM, Dmytro Sheyko wrote:
>
> Hi,
>
> There is some oddity in jstack thread reporting though it's quite cosmetic.
> If CMS is used, there is no empty line delimiter between ConcurrentMarkSweepThread and WatcherThread
>
> =====
> "VM Thread" prio=10 tid=0x00007fea38139800 nid=0x56c runnable
>
> "Gang worker#0 (Parallel GC Threads)" prio=10 tid=0x00007fea3801f000 nid=0x569 runnable
>
> "Gang worker#1 (Parallel GC Threads)" prio=10 tid=0x00007fea38021000 nid=0x56a runnable
>
> "Concurrent Mark-Sweep GC Thread" prio=10 tid=0x00007fea38088800 nid=0x56b runnable
> "VM Periodic Task Thread" prio=10 tid=0x00007fea381cc800 nid=0x574 waiting on condition
> =====
>
> On the other hand if G1 is used, the situation is opposite: there is unnecessary empty line.
>
> =====
> "VM Thread" prio=10 tid=0x00007f31a0117000 nid=0x58d runnable
>
> "Gang worker#0 (Parallel GC Threads)" prio=10 tid=0x00007f31a0023800 nid=0x586 runnable
>
> "Gang worker#1 (Parallel GC Threads)" prio=10 tid=0x00007f31a0025800 nid=0x587 runnable
>
> "G1 Main Concurrent Mark GC Thread" prio=10 tid=0x00007f31a0045800 nid=0x58b runnable
>
> "Gang worker#0 (G1 Parallel Marking Threads)" prio=10 tid=0x00007f31a0072800 nid=0x58c runnable
>
> "G1 Concurrent Refinement Thread#0" prio=10 tid=0x00007f31a002c000 nid=0x58a runnable
>
> "G1 Concurrent Refinement Thread#1" prio=10 tid=0x00007f31a002a000 nid=0x589 runnable
>
> "G1 Concurrent Refinement Thread#2" prio=10 tid=0x00007f31a0028000 nid=0x588 runnable
>
>
> "VM Periodic Task Thread" prio=10 tid=0x00007f31a01ac000 nid=0x595 waiting on condition
> =====
>
> Following patch fixes the problem:
> =====
> diff -r 6124ff421829 src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp
> --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp    Thu Sep 06 17:27:33 2012 -0700
> +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.cpp    Thu Sep 13 15:06:42 2012 +0300
> @@ -230,6 +230,7 @@
>   void ConcurrentMarkSweepThread::print_all_on(outputStream* st) {
>     if (_cmst != NULL) {
>       _cmst->print_on(st);
> +    st->cr();
>     }
>     if (_collector != NULL) {
>       AbstractWorkGang* gang = _collector->conc_workers();
> diff -r 6124ff421829 src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
> --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp    Thu Sep 06 17:27:33 2012 -0700
> +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp    Thu Sep 13 15:06:42 2012 +0300
> @@ -3456,7 +3456,6 @@
>     st->cr();
>     _cm->print_worker_threads_on(st);
>     _cg1r->print_worker_threads_on(st);
> -  st->cr();
>   }
>
>   void G1CollectedHeap::gc_threads_do(ThreadClosure* tc) const {
> diff -r 6124ff421829 src/share/vm/runtime/thread.cpp
> --- a/src/share/vm/runtime/thread.cpp    Thu Sep 06 17:27:33 2012 -0700
> +++ b/src/share/vm/runtime/thread.cpp    Thu Sep 13 15:06:42 2012 +0300
> @@ -4223,8 +4223,10 @@
>     st->cr();
>     Universe::heap()->print_gc_threads_on(st);
>     WatcherThread* wt = WatcherThread::watcher_thread();
> -  if (wt != NULL) wt->print_on(st);
> -  st->cr();
> +  if (wt != NULL) {
> +    wt->print_on(st);
> +    st->cr();
> +  }
>     CompileBroker::print_compiler_threads_on(st);
>     st->flush();
>   }
> =====
>
> I hope this change can be reviewed and applied together with
> 7194254 jstack reports wrong thread priorities‏
>
> Please let me know whether test is needed for the issue.
>
> Thanks,
> Dmytro
>
>   		 	   		


More information about the hotspot-dev mailing list