RFR(S): 8200720: Print additional information in thread dump (times, allocated bytes etc.)
Langer, Christoph
christoph.langer at sap.com
Fri Jun 1 10:12:40 UTC 2018
Hi Chris,
I think I should chime in about your 3rd point regarding thread dump parameter parsing.
For the SAP JVM we have extended the thread_dump operation a little bit and it has 3 params (3 is the limit for param numbers):
arg(0) is support for the "-l" switch, as you currently find in OpenJDK
arg(1) is a custom string that could be specified to print out a custom tag or headline in front of the thread dump
arg(2) is a flag to toggle printing the thread dump to the target VM's tty (as opposed to the default behavior of printing the thread dump to the operation's output stream).
So I can see that Gunter explicitly wanted to not break this behavior and added some extension just to arg(0). But I agree that it's probably not the nicest and straight forward thing to do.
What if we parse each argument and check whether it contains "-l" or "-e" or even "-le". So we could add extensions like "-tty" for dump to tty and "-t" for tag or something like this? Then for instance arg(0) could look like "-l -e -tty"?
Best regards
Christoph
> -----Original Message-----
> From: serviceability-dev [mailto:serviceability-dev-
> bounces at openjdk.java.net] On Behalf Of Chris Plummer
> Sent: Freitag, 1. Juni 2018 00:04
> To: Haug, Gunter <gunter.haug at sap.com>; serviceability-dev
> <serviceability-dev at openjdk.java.net>
> Subject: Re: RFR(S): 8200720: Print additional information in thread dump
> (times, allocated bytes etc.)
>
> Hi Gunter,
>
> globals.hpp: fix typo "informatiuon"
>
> I worry a little bit about the synchronizing (if that's the right word)
> of PrintExtendedThreadInfo and the dcmd's -e flag. When using -e, you
> are temporarily enabling PrintExtendedThreadInfo if it was false. This
> temporarily changes the behavior of thread dumps, and could impact other
> uses that happen in parallel. Also, could two simultaneous uses of -e
> result in PrintExtendedThreadInfo not getting restored properly?
>
> thread_dump() doesn't look right. It looks like you are iterating char
> by char over the argument, and expect something like "-el" to be
> specified rather then "-e -l". The loop should be iterating over
> op->arg(i), not op->arg(0)[i].
>
> The rest of the changes look fine.
>
> thanks,
>
> Chris
>
>
> On 5/30/18 8:12 AM, Haug, Gunter wrote:
> > Hi all,
> >
> > As Chris proposed, I have made an the extended output switchable. There
> is an VM flag (PrintExtendedThreadInfo), which is false by default.
> Moreover, there is an Option (-e) which can be used with jcmd Thread.print
> as well as with jstack. The -e option essentially sets PrintExtendedThreadInfo
> true just for the respective thread dump.
> >
> > Here is the updated webrev:
> >
> > http://cr.openjdk.java.net/~ghaug/webrevs/8200720.v2
> >
> > (https://bugs.openjdk.java.net/browse/JDK-8200720)
> >
> > Thanks,
> > Gunter
> >
> >
> > On 02.05.18, 17:07, "serviceability-dev on behalf of Haug, Gunter"
> <serviceability-dev-bounces at openjdk.java.net on behalf of
> gunter.haug at sap.com> wrote:
> >
> > Hi Chris,
> >
> > Thanks for looking into this.
> > You're right, there is a little more we have. We have implemented an IO
> tracing mechanism which - rather as a byproduct - keeps track of bytes read
> and written per thread. However, this of course requires changes not only in
> hotspot. We would be happy to contribute this as well, but this is a far bigger
> change and will probably lead to a far bigger discussion. Anyway, with the
> number of bytes read, the number of classes defined doesn't look that
> arbitrary anymore, as one can correlate IO to class loading.
> >
> > Regarding the verbose option I think that's a good idea!
> >
> > Thanks again,
> > Gunter
> >
> > On 01.05.18, 22:55, "Chris Plummer" <chris.plummer at oracle.com>
> wrote:
> >
> > Hi Gunter,
> >
> > The output you are adding is all useful. I think the question is (and
> > I'd like to see a few people chime in on this for this review) is
> > whether or not all of it is the appropriate for a thread's stack dump.
> > For example, defined_classes is on the fringe of what I would call
> > generally useful info in a stack dump. Sure, there might be that rare
> > case when you need it, but how often compared to other useful info
> > maintained on a per thread basis. How many other bits of useful info
> are
> > not being printed in favor of defined_classes? It seems you have more
> in
> > the queue. How many? I'm worried about how cluttered the stack
> dumps
> > will get. Maybe we should add some sort of verbose thread dumping
> > option. Just a thought.
> >
> > As for the implementation, overall it looks good, but I can't speak to
> > whether or not you are doing proper accounting of defined_classes
> and
> > bytes allocated. You'll need input from someone with more knowledge
> of
> > those areas. We'll also need to do some testing to make sure tool tests
> > are not impacted.
> >
> > thanks,
> >
> > Chris
> >
> > On 4/30/18 2:51 AM, Haug, Gunter wrote:
> > > Hi,
> > >
> > > this is an update to an RFR I posted on hotspot-dev, but it is probably
> more suitable to post it here. Can I please have a review and a sponsor for
> the following enhancement:
> > >
> > > http://cr.openjdk.java.net/~ghaug/webrevs/8200720.v1
> > > https://bugs.openjdk.java.net/browse/JDK-8200720
> > >
> > > We at SAP have extended the thread dumps (obtained by jstack or
> jcmd) by several fields providing thread specific information. These
> extensions are quite popular with our support team. With some knowledge
> of the architecture of the application, they often allow for quick and simple
> diagnosis of a running system. Therefore we would like to contribute these
> enhancements.
> > >
> > > I took a few simple examples here, namely cpu time, elapsed time
> since thread creation, bytes allocated and classes defined by the thread and
> the pthread-id or equivalent on platforms where it makes sense. Provided it
> is known how the application should behave, a misbehaving thread can
> identified easily.
> > >
> > > There is no measurable overhead for this enhancement. However, it
> may be a problem that the format of the output is changed. Tools parsing the
> output may have to be changed.
> > >
> > > Here is an example of the output generated:
> > >
> > > ------------------------------------------------------
> > >
> > > "main" #1 prio=5 os_prio=31 cpu=6300.65ms elapsed=123.28s
> allocated=242236760B defined_classes=1725 tid=0x00007fa13a806000
> nid=0x1c03 pthread-id=0x109708000 waiting on condition
> [0x0000000109707000]
> > > java.lang.Thread.State: TIMED_WAITING (sleeping)
> > > JavaThread state: _thread_blocked
> > > Thread: 0x00007fa13a806000 [0x1c03] State: _at_safepoint
> _has_called_back 0 _at_poll_safepoint 0
> > > JavaThread state: _thread_blocked
> > > at java.lang.Thread.sleep(java.base/Native Method)
> > > ...
> > > ------------------------------------------------------
> > >
> > > As mentioned above, we have a whole bunch of other
> enhancements to the thread dump similar to this one and would be willing to
> contribute them if there is any interest.
> > >
> > > Thanks and best regards,
> > > Gunter
> > >
> > >
> >
> >
> >
> >
> >
>
More information about the serviceability-dev
mailing list