RFR: 8337199: Add jcmd Thread.vthread_summary diagnostic command

Alan Bateman alanb at openjdk.org
Tue Nov 26 06:39:45 UTC 2024


On Tue, 26 Nov 2024 01:37:33 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> c.f: [https://bugs.openjdk.org/browse/JDK-8339420](https://bugs.openjdk.org/browse/JDK-8339420)
>> 
>> Summary
>> -------
>> 
>> Add `jcmd <pid> Thread.vthread_summary` to print summary information that is useful when trying to diagnose issues with virtual threads.
>> 
>> 
>> Problem
>> -------
>> 
>> The JDK is lacking tooling to diagnose issues with virtual threads.
>> 
>> 
>> Solution
>> --------
>> 
>> Add a new command that the `jcmd` command line tool can use to print information about virtual threads. The output includes the virtual thread scheduler, the schedulers used to support timeouts, and the I/O pollers used to support virtual threads doing socket I/O, and a summary of the thread groupings.
>> 
>> Here is sample output. The output is intended for experts and is not intended for automated parsing.
>> 
>> 
>> Virtual thread scheduler:
>> java.util.concurrent.ForkJoinPool at 4a624db0[Running, parallelism = 16, size = 2, active = 0, running = 0, steals = 2, tasks = 0, submissions = 0]
>> 
>> Timeout schedulers:
>> [0] java.util.concurrent.ScheduledThreadPoolExecutor at 1f17ae12[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
>> [1] java.util.concurrent.ScheduledThreadPoolExecutor at 6193b845[Running, pool size = 1, active threads = 0, queued tasks = 1, completed tasks = 0]
>> [2] java.util.concurrent.ScheduledThreadPoolExecutor at c4437c4[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
>> [3] java.util.concurrent.ScheduledThreadPoolExecutor at 3f91beef[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
>> 
>> Read I/O pollers:
>> [0] sun.nio.ch.KQueuePoller at 524bf25 [registered = 1]
>> 
>> Write I/O pollers:
>> [0] sun.nio.ch.KQueuePoller at 25c41da2 [registered = 0]
>> 
>> Thread groupings:
>> <root> [platform threads = 11, virtual threads = 0]
>> java.util.concurrent.ScheduledThreadPoolExecutor at c4437c4 [platform threads = 0, virtual threads = 0]
>> java.util.concurrent.ScheduledThreadPoolExecutor at 3f91beef [platform threads = 0, virtual threads = 0]
>> ForkJoinPool.commonPool/jdk.internal.vm.SharedThreadContainer at 4fa374ea [platform threads = 0, virtual threads = 0]
>> java.util.concurrent.ThreadPoolExecutor at 506e1b77 [platform threads = 1, virtual threads = 0]
>> java.util.concurrent.ScheduledThreadPoolExecutor at 1f17ae12 [platform threads = 0, virtual threads = 0]
>> java.util.concurrent.ThreadPerTaskExecutor at 24155ffc [platform threads = 0, virtual threads = 2]
>> ForkJoinPool-1/jdk.internal.vm.SharedThreadC...
>
> src/java.base/share/classes/jdk/internal/vm/VThreadSummary.java line 77:
> 
>> 75:                 .append(System.lineSeparator());
>> 76:         sb.append(JLA.virtualThreadDefaultScheduler())
>> 77:                 .append(System.lineSeparator());
> 
> Stylistically it is common/customary to align the dot operator in chained method calls.

It's just a style thing, it was done this way because the first string is the heading, the strings that follow go under the heading.

> src/jdk.jcmd/share/man/jcmd.1 line 1:
> 
>> 1: .\" Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved.
> 
> The `.1` nroff files are no longer in the repo, you need to edit the markdown source instead.

That was already pointed out, I think the PR was merged from an older version.

> test/hotspot/jtreg/serviceability/dcmd/thread/VThreadSummaryTest.java line 74:
> 
>> 72:                 .shouldContain(Objects.toIdentityString(defaultScheduler()))
>> 73:                 .shouldContain("Timeout schedulers:")
>> 74:                 .shouldContain("[0] " + ScheduledThreadPoolExecutor.class.getName());
> 
> Again please align dots on chained calls.

and the IDE will of course re-align it at next edit :-)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22121#discussion_r1857881180
PR Review Comment: https://git.openjdk.org/jdk/pull/22121#discussion_r1857881767
PR Review Comment: https://git.openjdk.org/jdk/pull/22121#discussion_r1857882356


More information about the core-libs-dev mailing list