Review Request: 7009098: SA cannot open core file larger than 2GB
Poonam Bajaj
poonam.bajaj at oracle.com
Wed Feb 8 22:42:20 PST 2012
Hi David,
On 2/9/2012 11:36 AM, David Holmes wrote:
> On 9/02/2012 2:41 PM, Poonam Bajaj wrote:
>> Could I have code reviews for the following fix:
>>
>> 7009098: SA cannot open core file larger than 2GB
>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7009098
>> Webrev: http://cr.openjdk.java.net/~poonam/7009098/webrev.00/
>>
>> Serviceability Agent on Linux is not able to open core files larger
>> than 2GB. The fix is to enable the 'Large File Support' by compiling
>> the libsaproc.so with -D_FILE_OFFSET_BITS=64. This is added to both
>> agent/src/os/linux/Makefile (which builds SA from agent/make/) and
>> make/linux/makefiles/saproc.make (which builds SA with Hotspot build).
>
> This seems ok.
>
>> There is one more change with which SA should first load libraries
>> from the path specified with SA_ALTROOT rather than loading from
>> the host system.
>
> Where does this come from? It is not related to this CR. Is there
> another CR indicating the current behaviour is incorrect? Or a spec
> for it that indicates it is incorrect?
>
This change became necessary to open the same customer provided core
which required the first change. There is no separate bug filed for this
change.
There is a document in the hotspot repository
hotspot/agent/doc/transported_core.html which talks about the
transported cores and the use of SA_ALTROOT.
" The best possible way to debug a transported core dump is to match the
debugger machine to that of core dump machine. i.e., have same Kernel
and libthread patch level between the machines. mdb (Solaris modular
debugger) may be used to find the Kernel patch level of core dump
machine and debugger machine may be brought to the same level.
If the matching machine is "far off" in your network, then
* consider using rlogin and CLHSDB - SA command line HSDB interface
<http://cafebabe.uk.oracle.com/lxr/source/hotspot/agent/doc/clhsdb.html>
or
* use SA remote debugging and debug the core from core machine remotely.
But, it may not be feasible to find matching machine to debug. If so,
you can copy all application shared objects (and libthread_db.so, if
needed) from the core dump machine into your debugger machine's
directory, say, /export/applibs. Now, set *SA_ALTROOT* environment
variable to point to /export/applibs directory. Note that
/export/applibs should either contain matching 'full path' of libraries.
i.e., /usr/lib/libthread_db.so from core machine should be under
/export/applibs/use/lib directory and
/use/java/jre/lib/sparc/client/libjvm.so from core machine should be
under /export/applibs/use/java/jre/lib/sparc/client so on or
/export/applibs should just contain libthread_db.so, libjvm.so etc.
directly. "
" On Linux, SA parses core and shared library ELF files. SA *does not*
use libthread_db.so or rtld_db.so for core dump debugging (although
libthread_db.so is used for live process debugging). But, you may still
face problems with transported core dumps, because matching shared
objects may not be in the path(s) specified in core dump file. To
workaround this, you can define environment variable *SA_ALTROOT* to be
the directory where shared libraries are kept. The semantics of this
env. variable is same as that for Solaris (please refer above)."
So, if SA_ALTROOT is specified, libraries from this path should get
loaded and not from the path embedded in the core file.
Thanks,
Poonam
> David
> -----
>
>>
>> Thanks,
>> Poonam
>> --
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20120209/73c7dc39/attachment-0001.html
More information about the serviceability-dev
mailing list