RFR: 8146551: The output from -Xlog:classresolve=info has been shortened
Bengt Rutisson
bengt.rutisson at oracle.com
Fri Mar 11 13:30:49 UTC 2016
Hi Max,
On 2016-03-10 15:54, Max Ockner wrote:
> Hello,
>
> Thanks to everyone for their ideas and help. If there are no more
> concerns, I would like to submit this.
I'm not one of the reviewers of this, (just had a quick look now and it
does look good to me) but since I was involved in other discussions in
this email thread I thought I'd say that I am fine with you pushing this.
I think the discussions regarding how to use the UL framework will be
handled in other threads.
Thanks,
Bengt
>
> Thanks,
> Max
>
> On 3/9/2016 1:49 PM, Rachel Protacio wrote:
>> Looks good to me, Max. And I agree with your decision about the level.
>>
>> Rachel
>>
>> On 3/3/2016 3:34 PM, Max Ockner wrote:
>>> Thanks for the additional feedback.
>>> I have set all of the output to the debug level.
>>> webrev: http://cr.openjdk.java.net/~mockner/8146551.04/
>>>
>>> You can't really infer anything about the verbosity of a Trace*
>>> option from the face that it starts with "Trace", though I agree
>>> that it would make a lot more sense if that were the case...
>>>
>>> I chose to put all of the output on debug after accounting for 2
>>> things;
>>> (1) The output is extremely verbose, even for java -version.
>>> Therefore, all output should be either debug or trace level.
>>> (2) None of the output ever conditioned on Verbose or WizardMode.
>>> Based on the conventions we have been following, the output
>>> shouldn't be on trace level.
>>>
>>> ==> Debug level.
>>>
>>> Thanks,
>>> Max
>>>
>>> On 3/3/2016 4:45 AM, Bengt Rutisson wrote:
>>>>
>>>> Hi Max and Mikael,
>>>>
>>>> On 2016-03-03 10:40, Mikael Gerdin wrote:
>>>>> Hi Max,
>>>>>
>>>>> On 2016-03-01 23:30, Max Ockner wrote:
>>>>>> Hello,
>>>>>>
>>>>>> Please review this small fix which attempts to shorten the output
>>>>>> from
>>>>>> -Xlog:classresolve=info to an acceptable length.
>>>>>>
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8146551
>>>>>> Webrev: http://cr.openjdk.java.net/~mockner/8146551.02/
>>>>>>
>>>>>> Summary: java '-Xlog:classresolve=info -version' used to produce
>>>>>> 3,683
>>>>>> lines of output. This is unacceptably verbose for info level
>>>>>> logging and
>>>>>> most of the output is not useful.
>>>>>>
>>>>>> "java -Xlog:classresolve=info -version" used to produce:
>>>>>> - 3,683 total lines of output.
>>>>>> - 3,121 total lines of output from
>>>>>> ConstantPool::trace_class_resolution().
>>>>>> - 1,329 unique lines of output.
>>>>>> - 767 unique lines of output from
>>>>>> ConstantPool::trace_class_resolution().
>>>>>> - 562 total lines of output from all other sources, all
>>>>>> unique.
>>>>>>
>>>>>> The code in ConstantPool which called
>>>>>> ConstantPool::trace_class_resolution() was doing approximately this:
>>>>>>
>>>>>> if (log_is_enabled(Info,classresolve)){ trace_class_resolution(...)}
>>>>>> else { resolve the class }
>>>>>>
>>>>>> So if logging was turned on, the class would not be resolved
>>>>>> properly,
>>>>>> but it would produce a log entry saying that the class was being
>>>>>> resolved. As a result, the constant pool entry would still contain a
>>>>>> Symbol* the next time this piece of code was reached, and it would
>>>>>> produce yet another classresolve log entry. In some cases, this was
>>>>>> producing many consecutive identical log entries, taking up full
>>>>>> pages
>>>>>> at worst, and averaging a little over 4 duplicates per message.
>>>>>> Not cool.
>>>>>>
>>>>>> The above duplication issue has been fixed, and the
>>>>>> ConstantPool::trace_class_resolution output has been moved to the
>>>>>> debug
>>>>>> leve. There are still 562 unique lines of output for "java
>>>>>> -Xlog:classresolve=info -version". There are now 767 additional
>>>>>> unique
>>>>>> lines of output when for the "java -Xlog:classresolve=debug
>>>>>> -version" .
>>>>>> This is better than before but still quite a lot. It seems like
>>>>>> all of
>>>>>> the info level output is equally important(or unimportant), as
>>>>>> you can
>>>>>> see in the sample below:
>>>>>>
>>>>>> [0.026s][info][classresolve] java.lang.reflect.Type java.lang.Object
>>>>>> (super)
>>>>>> [0.026s][info][classresolve] java.lang.Class java.lang.Object
>>>>>> (super)
>>>>>> [0.026s][info][classresolve] java.lang.Class java.io.Serializable
>>>>>> (interface)
>>>>>> [0.026s][info][classresolve] java.lang.Class
>>>>>> java.lang.reflect.GenericDeclaration (interface)
>>>>>> [0.026s][info][classresolve] java.lang.Class java.lang.reflect.Type
>>>>>> (interface)
>>>>>> [0.026s][info][classresolve] java.lang.Class
>>>>>> java.lang.reflect.AnnotatedElement (interface)
>>>>>> [0.026s][info][classresolve] java.lang.Cloneable java.lang.Object
>>>>>> (super)
>>>>>> [0.027s][info][classresolve] java.lang.ClassLoader
>>>>>> java.lang.Object (super)
>>>>>> [0.027s][info][classresolve] java.lang.System java.lang.Object
>>>>>> (super)
>>>>>> [0.027s][info][classresolve] java.lang.Throwable java.lang.Object
>>>>>> (super)
>>>>>> [0.027s][info][classresolve] java.lang.Throwable
>>>>>> java.io.Serializable
>>>>>> (interface)
>>>>>> [0.027s][info][classresolve] java.lang.Error java.lang.Throwable
>>>>>> (super)
>>>>>> [0.027s][info][classresolve] java.lang.ThreadDeath
>>>>>> java.lang.Error (super)
>>>>>>
>>>>>> How do you feel about this? Possible solutions include setting all
>>>>>> output to debug level, or removing some of the logging messages.
>>>>>
>>>>> As I stated in the bug my personal opinion is that "info" level
>>>>> logging should be fairly limited in order to make "-Xlog:all" a
>>>>> useful flag to get a reasonable amount of output about what is
>>>>> happening in a JVM.
>>>>>
>>>>> One approach could be to move the most verbose output to
>>>>> classresolve=trace and keep the rest of classresolve output on the
>>>>> debug level.
>>>>>
>>>>> The fact that the flag was called "TraceClassResolution" is in my
>>>>> mind a hint that if it produces large amounts of output then
>>>>> perhaps that output should be logged on the "trace" log level.
>>>>
>>>> +1 for this approach.
>>>>
>>>> I quite agree with Mikael that we should be a bit careful what we
>>>> log at info level.
>>>>
>>>> Thanks,
>>>> Bengt
>>>>
>>>>>
>>>>> /Mikael
>>>>>
>>>>>>
>>>>>> Tested with jtreg runtime tests. ClassResolutionTest.java has been
>>>>>> modified to check for the new output.
>>>>>>
>>>>>> Thanks,
>>>>>> Max
>>>>>>
>>>>>>
>>>>
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list