RFR (S) 8212988: add recent class unloading events to the hs_err log

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Tue Feb 12 21:26:55 UTC 2019



On 2/12/19 3:10 PM, Thomas Stüfe wrote:
>
>
> On Tue, Feb 12, 2019 at 8:54 PM <coleen.phillimore at oracle.com 
> <mailto:coleen.phillimore at oracle.com>> wrote:
>
>
>
>     On 2/12/19 1:41 PM, Thomas Stüfe wrote:
>>
>>
>>     On Tue, Feb 12, 2019 at 5:51 PM <coleen.phillimore at oracle.com
>>     <mailto:coleen.phillimore at oracle.com>> wrote:
>>
>>
>>
>>         On 2/12/19 10:57 AM, Thomas Stüfe wrote:
>>>         Hi Coleen,
>>>
>>>         this is useful.
>>
>>         We have had some problems where the class is unloaded and
>>         this would help with diagnosing this.
>>>
>>>         Why just InstanceKlass?
>>
>>         This is all we report when using -Xlog:class+unload, also
>>         arrays are only unloaded when their InstanceKlass
>>         (bottom_klass) are unloaded so this didn't seem like useful
>>         additional information.
>>
>>>
>>>         Why is the pointer interesting in the event log printout?
>>
>>         When debugging core files after the fact, we might have
>>         logging that this class was unloaded and some field off the
>>         pointer may be also found in the core file.  It might not be
>>         that helpful to have the InstanceKlass pointer vs. some other
>>         metaspace pointer though.   Including the pointer was to help
>>         with core file analysis though.  Maybe there could be a
>>         different pointer printed ?
>>>
>>     I think that makes sense, especially for post mortem analysis.
>>     Even more if you combine it with a class load event.
>>
>>>         Since we pay always for this, how about offloading the
>>>         format printf to when the log is actually printed. You could
>>>         use, as EventRecord payload, a struct containing the
>>>         strduped class name and its IK*. Then you only pay for the
>>>         strdup, not for the whole format printf, and not for the
>>>         multiple copies of the prefix text.
>>
>>         I didn't want to deconstruct this further for performance
>>         sake.  Most of the changes are to keep the performance
>>         neutral since we always pay.  Most of the Events are
>>         infrequent and this is relatively infrequent also.  Events
>>         for exceptions are less infrequent so that would benefit more
>>         from more deconstruction than this would.
>>
>>
>>     Okay, fair enough.
>>
>>     Whenever I see the event log code I think we should make this
>>     cheaper.
>>
>>     In our proprietary fork we have a generic solution where the
>>     format printing is offloaded to printing time. We store the
>>     format string and the first three va-arg parameters in the event
>>     record, with some special handling for string args which may need
>>     duplicating. It works and is cheap but a bit hard wired and maybe
>>     not the most pretty solution.
>>
>>     Also, the pressure is not high in the OpenJDK since its event
>>     logs are not that "hot". In our fork we log way more frequently,
>>     so costs became an issue.
>
>     This is interesting.  If you have patches to improve this, I'm
>     open to reviewing them if you want to upstream them. At SAP you
>     seem to do more debugging based on information in the hs_err_pid file.
>
>
> Thank you, appreciated. It does not have a high priority right now, 
> but we may come around to do this.
>
>>
>>         Thanks for your comments. What do you think?
>>
>>
>>     I think your patch looks fine. One could improve upon it (e.g.
>>     log class loading etc) but it is not necessary to make this useful.
>
>     Thank you!  We usually don't have bugs related to class loading vs
>     unloading, and we already have unified logging that helps debug
>     those issues.
>

I misspoke.   We have class loading events in the generic event section:

Events (10 events):
...
Event: 472.776 Executing VM operation: ZMarkEnd
Event: 472.777 Executing VM operation: ZMarkEnd done
Event: 472.814 loading class org/apache/cassandra/config/CFMetaData
Event: 472.814 loading class org/apache/cassandra/config/CFMetaData done

Coleen

>
>     Coleen
>
>
> ..Thomas
>
>>
>>     Cheers, Thomas
>>
>>         Coleen
>>>
>>>         Cheers, Thomas
>>>
>>>
>>>         On Tue, Feb 12, 2019 at 4:20 PM
>>>         <coleen.phillimore at oracle.com
>>>         <mailto:coleen.phillimore at oracle.com>> wrote:
>>>
>>>             Summary: also moved class unloading logging in expected
>>>             place.
>>>
>>>             Tested with assert to verify hs_err_file, some dacapo
>>>             performance
>>>             testing, and hs tier1-6.  See bug for details.
>>>
>>>             open webrev at
>>>             http://cr.openjdk.java.net/~coleenp/2019/8212988.01/webrev
>>>             bug link https://bugs.openjdk.java.net/browse/JDK-8212988
>>>
>>>             Thanks,
>>>             Coleen
>>>
>>
>



More information about the hotspot-runtime-dev mailing list