Hi David, Chris,

would it be an option to unconditionally print the additional information? 
Regardless which way this is implemented it will be rather complicated and it 
only switches on/off a few field in the thread dump.

Thanks,
Gunter  

On 04.06.18, 01:13, "David Holmes" <david.hol...@oracle.com> wrote:

    Hi Gunter, Chris,
    
    Sorry just trying to catch up and this is only a partial look so far ...
    
    BTW these changes are not limited to serviceability code so adding in 
    runtime team as well.
    
    On 2/06/2018 9:12 AM, Chris Plummer wrote:
    > Hi Gunter,
    > 
    > On 6/1/18 3:17 AM, Haug, Gunter wrote:
    >> Hi Chris,
    >>
    >> thanks for looking into this!
    >>
    >> Re the synchronization: The value is stored only in a VM operation at 
    >> a safepoint by the VM thread. I was of the opinion, that this could 
    >> not be interrupted by a second VM operation (of the same type). Or am 
    >> I missing something else?
    > I was really thinking more about the temporary changing of 
    > PrintExtendedThreadInfo, not the value stored in the VMOp. You may be be 
    > correct that no more than one VMOp is executing, but while it is 
    > executing it is has changed the value of PrintExtendedThreadInfo, which 
    > might have an impact on anything else that triggers printing thread info 
    > while the VMOp is executing.
    
    Even if nothing else can possibly be running during the safepoint I find 
    it extremely bad form to change a command-line flag in this way, 
    particularly from a safepoint!
    
    If this flag is intended to be dynamically enabled as part of a dcmd 
    then it should also be a Manageable flag IMHO.
    
    That said ...
    
    >>   I did think about passing an argument to the various print_on member 
    >> functions of the thread classes, but this would require rather 
    >> extensive code changes for a rather tiny extension. Therefore I feel 
    >> doing it like this is the lesser evil.
    
    ... it's obviously not truly a global setting, but one that is needed on 
    a per-print-request basis. The flag is just the default, but if the 
    default is off you still want to enable extended printing on a 
    per-request basis.
    
    The current print_on mechanics is not set up for this kind of 
    flexibility. I think this needs more thought.
    
    ---
    
    Re osThread.cpp shared code changes ... I really hate to see all the 
    ifdefs in there. Please add a pd_print_on function to support this if 
    you truly want platform specific information.
    
    ---
    
    threadStatisticInfo.hpp
    
    typo: getElepsedTime() -> getElapsedTime()
    
    Thanks,
    David
    
    
    
    >>
    >> Re thread_dump(): I think it's correct or, well, at least it works ;-) 
    >> In fact jstack will transfer the "-e" and "-l" in only one string, 
    >> i.e. op->arg(0).
    > So you are saying that op->arg(0) is "-e -l" when using jstack? I think 
    > you really need to clean up the parsing. As it stands right now passing, 
    > I get the feeling that if a user erroneously asks for help by using 
    > "jcmd <pid> Thread.Print -help", it will end up executing with -e an -l 
    > enabled, and no failure for the invalid "-help" option.
    >>   Christoph has already explained my reasoning. But I agree, it's not 
    >> nice and I would be happy to do it like Christoph suggested.
    > I'll respond separately to his suggestion.
    > 
    > thanks,
    > 
    > Chris
    >>
    >> And typo fixed, sorry.
    >>
    >> Thanks again,
    >> Gunter
    >>
    >> On 01.06.18, 00:03, "Chris Plummer" <chris.plum...@oracle.com> wrote:
    >>
    >>      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-boun...@openjdk.java.net on behalf of 
    >> gunter.h...@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.plum...@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
    >>      >          >
    >>      >          >
    >>      >
    >>      >
    >>      >
    >>      >
    >>      >
    >>
    > 
    > 
    

Reply via email to