On Aug 12, 2013, at 8:43 PM, Yumin Qi <yumin...@oracle.com> wrote:

> Coleen,
> 
>  Chris Thalinger  already answered some of your concerns. For jar file which 
> dumped in this change, compiler replay has added functions to SA to dump out 
> replay jars against core file. Since customer is the one wants us to fix 
> problems in VM, the disclosure of such jar to us should be OK I think, any 
> way if we have core file, we already have the loaded classes.
>  This should mainly be focused on dump jars as possible at the last stage of 
> error reporter. I chose using SA since with c++ to implement same 
> functionality I have to use zip file operation to do so, which is not a fit 
> at such condition, but in SA the same operation ready for use. The only case 
> we could not get jar files is no core file available, in such case, this 
> change will supply an alternate.
> 
>  Looks this need more discussion for further decision.

One more comment (just FTR):  the class dumping should only happen when we 
crash in one of the compiler threads; not always.

-- Chris

> 
> Thanks
> Yumin
> 
> 
> On 8/12/2013 2:43 PM, Coleen Phillimore wrote:
>> 
>> Yumin,
>> 
>> I don't think this change should be added to the JVM for the following 
>> reasons.
>> 
>> 1. Error handling should only contain safe actions.   We have concerns that 
>> the SA is not that stable and would prevent getting a real core file in many 
>> error situations.   You couldn't have tested all error situations because 
>> these are usually the things we don't know about.   You also mention that 
>> there are currently bugs preventing this feature from working in your first 
>> email.
>> 
>> 2. I am not convinced that having a separate jar file with loaded classes 
>> (is it a list that SA generates?) would be collected by an error reporter.   
>> If it's collected, I don't see how helpful it would be.  Also a customer may 
>> not want their classes disclosed in error reporting.
>> 
>> 3.  This doesn't seem important enough to include as a new feature in jdk8 
>> release, which is feature-complete.   I don't see a customer request for it.
>> 
>> Coleen
>> 
>> On 08/12/2013 01:00 PM, Yumin Qi wrote:
>>> Chris, David
>>> 
>>>  Yes. This can be after crash with core file, but some time no core file 
>>> generated (also if the error could not repeat, we will never got 
>>> information again), so dumping  target process is also a choice. To avoid 
>>> more confusion, this step was launched at the very last moment, just before 
>>> raise abort to exit. At this moment, if client process could not attach to 
>>> the target process it will exit right away.
>>> 
>>> Answers to David:
>>> 
>>> Note that the SA is only present in a full JDK, not a JRE (full or compact 
>>> profile).
>>>  Yes, in code, if no sa-jdi.jar found, skip fork.
>>> 
>>> - What mechanism will the SA try to use to query the VM?
>>> 
>>>  After successfully attached to target process, SA will read via proc APIs 
>>> and vmStructs (named TYPEDB) to iterate  memory of system dictionary read 
>>> (only)  from target process to dump class information.
>>> 
>>> - What if the state of the crashed VM stops the SA from being able to 
>>> attach properly (ie both processes hang)?
>>> 
>>>  That should be an attaching API problem. We haven't watched such case 
>>> happened so far.
>>> 
>>> - What if it the SA also crashes, will it launch a third VM then a fourth 
>>> etc?
>>> 
>>>  Definitely don't want to see this happened in a chain. The solution may 
>>> use a property such as 
>>> sun.jvm.hotspot.DumpLoadedClasses.dumpingInProcess=true to pass into SA 
>>> process, at launching call, check if the property set, if set, do not fork. 
>>> When SA process died, it will generate core file first, note the target 
>>> process still waiting for its exit, so when target exit, the core file (if 
>>> both use default core as name) will be override by target. The SA process 
>>> will only leave a hs_err_pid*.log file. (? read such property in handler is 
>>> possible?)
>>> 
>>> Also what is the nature of this dump? How big is it? Where will it go?
>>> The jars includes *app.jar and *boot.jar, the later usually can be ignored 
>>> (rt.jar etc system jars) unless it's rewritten by JVMTI agent. The app.jar 
>>> will contain all classes by customer, so we can do whatever we can to the 
>>> jar.
>>> 
>>> 
>>> Thanks
>>> Yumin
>>> 
>>> 
>>> On 8/12/2013 5:51 AM, Christian Tornqvist wrote:
>>>> Hi Yumin,
>>>> 
>>>> The idea is to do as little as possible in the VM error handler, since 
>>>> we've crashed for some reason we don't know what state the process is in 
>>>> and we have to be extremely careful in when we're gathering the 
>>>> information. This seems like a step that is risky for all of the reasons 
>>>> David mentioned below.
>>>> 
>>>> It's also information that can easily be extracted post-mortem from the 
>>>> core/mdmp using the method you described for OSX, so gathering this at the 
>>>> time of a crash seems like an unnecessary risk.
>>>> 
>>>> Thanks,
>>>> Christian
>>>> 
>>>> -----Original Message-----
>>>> From: hotspot-compiler-dev-boun...@openjdk.java.net 
>>>> [mailto:hotspot-compiler-dev-boun...@openjdk.java.net] On Behalf Of David 
>>>> Holmes
>>>> Sent: Monday, August 12, 2013 1:56 AM
>>>> To: Yumin Qi
>>>> Cc: hotspot compiler; hotspot-runtime-...@openjdk.java.net
>>>> Subject: Re: RFR: 8020962: dump loaded java classes when vm crash
>>>> 
>>>> Hi Yumin,
>>>> 
>>>> Note that the SA is only present in a full JDK, not a JRE (full or compact 
>>>> profile).
>>>> 
>>>> I have quite a few concerns with this:
>>>> 
>>>> We already do a lot of things that are not valid to be done from a signal 
>>>> handling context but this really takes that to an extreme. Doing fork-exec 
>>>> from a signal handler seems like a recipe for disaster (Note the existing 
>>>> onError facility is typically used for synchronous failures.)
>>>> 
>>>> The idea of launching a second VM to try and query a VM that has crashed 
>>>> also seems somewhat problematic:
>>>> - What mechanism will the SA try to use to query the VM?
>>>> - What if the state of the crashed VM stops the SA from being able to 
>>>> attach properly (ie both processes hang)?
>>>> - What if it the SA also crashes, will it launch a third VM then a fourth 
>>>> etc?
>>>> 
>>>> Also what is the nature of this dump? How big is it? Where will it go?
>>>> 
>>>> Thanks,
>>>> David
>>>> 
>>>> On 12/08/2013 9:36 AM, Yumin Qi wrote:
>>>>> Hi, all
>>>>> 
>>>>>    I would like to have your review for
>>>>> 
>>>>> http://cr.openjdk.java.net/~minqi/8020962/webrev0/
>>>>> <http://cr.openjdk.java.net/%7Eminqi/8020962/webrev0/>
>>>>> 
>>>>> Description: When JVM crashed, we also want to check the application
>>>>> class files especially we got core file from customers.  The aftermath
>>>>> analysis will benefit from all loaded java classes available. In this
>>>>> change, spawn another process running SA to do the job when JVM
>>>>> crashes, this way also avoid further messing up with the error report
>>>>> which already in signal handler.
>>>>> 
>>>>> Note: The test has done with following two bugs worked around:
>>>>>    8022655: ClassDump ignored jarStream setting (This will be fixed
>>>>> and integrated by Kevin Walls soon)
>>>>>    8011888: sa.js: TypeError: [object JSAdapter] has no such function
>>>>> "__has__" (Not know when it will be integrated)
>>>>>    That is, without those two fixed, the jars of loaded classes will
>>>>> not be successfully dumped.
>>>>>    Also, on MacOS it requires security access permission to attach to
>>>>> another process, so omit doing so. To get loaded jar file s, with core
>>>>> file available (on all platforms), one can (only after this
>>>>> change) do
>>>>> 
>>>>>    $JAVA_HOME/bin/java [-d64] -cp $JAVA_HOME/lib/sa-jdi.jar
>>>>> sun.jvm.hotspot.DumpLoadedClasses $JAVA_HOME/bin/java corefile
>>>>> 
>>>>> 
>>>>> Thanks
>>>>> Yumin
>>> 
>> 
> 

Reply via email to