使用 Serviceability Agent 检查 JVM 核心转储时如何获取共享库列表?

Posted

技术标签:

【中文标题】使用 Serviceability Agent 检查 JVM 核心转储时如何获取共享库列表?【英文标题】:How to get the Shared Library lists when check JVM core dump with Serviceability Agent? 【发布时间】:2017-01-25 06:07:35 【问题描述】:

当使用 Serviceability Agent 为 JVM 调试传输的核心文件时,我们知道调试器可能会遇到问题 由于以下两类库不匹配:共享库和系统库,解决方法是将程序使用的所有库从核心主机复制到调试器主机。

我的问题是如何找到我们需要复制的库? 我们从一本书中看到有两种方法: 一个是“所需的库文件列表可以从“动态库”部分下的 hs_err 日志文件中获取,另一个是“使用 gdb、dbx 和 WinDbg 等本机调试器。” 但是如果没有hs_err 日志文件,但是通过dbg 来获取所需的库呢? gdb 有一个命令可以列出它们吗?

【问题讨论】:

【参考方案1】:

使用info sharedlibraryinfo proc mapping gdb 命令。

$ gdb -core core.3539 /usr/java/jdk1.8.0_102/bin/java

(gdb) info sharedlibrary
From                To                  Syms Read   Shared Object Library
0x00007f5f11569a70  0x00007f5f11576ab1  Yes         /lib/x86_64-linux-gnu/libpthread.so.0
0x00007f5f11350310  0x00007f5f1135d598  Yes (*)     /usr/java/jdk1.8.0_102/bin/../lib/amd64/jli/libjli.so
0x00007f5f1114ada0  0x00007f5f1114b98e  Yes         /lib/x86_64-linux-gnu/libdl.so.2
0x00007f5f10da08b0  0x00007f5f10ef3334  Yes         /lib/x86_64-linux-gnu/libc.so.6
0x00007f5f11781ac0  0x00007f5f1179f640  Yes         /lib64/ld-linux-x86-64.so.2
0x00007f5f0ffaf840  0x00007f5f10885f58  Yes (*)     /usr/java/jdk1.8.0_102/jre/lib/amd64/server/libjvm.so
0x00007f5f0fa8d600  0x00007f5f0fafed0a  Yes         /lib/x86_64-linux-gnu/libm.so.6
0x00007f5f0f882100  0x00007f5f0f8851df  Yes         /lib/x86_64-linux-gnu/librt.so.1
0x00007f5f0f6752a0  0x00007f5f0f67c2a8  Yes (*)     /usr/java/jdk1.8.0_102/jre/lib/amd64/libverify.so
0x00007f5f0f4525e0  0x00007f5f0f468a88  Yes (*)     /usr/java/jdk1.8.0_102/jre/lib/amd64/libjava.so
0x00007f5f0f23d2d0  0x00007f5f0f242bf1  Yes         /lib/x86_64-linux-gnu/libnss_compat.so.2
0x00007f5f0f026ff0  0x00007f5f0f0341e1  Yes         /lib/x86_64-linux-gnu/libnsl.so.1
0x00007f5f0ee190b0  0x00007f5f0ee1f8ce  Yes         /lib/x86_64-linux-gnu/libnss_nis.so.2
0x00007f5f0ec071b0  0x00007f5f0ec0d2a1  Yes         /lib/x86_64-linux-gnu/libnss_files.so.2
0x00007f5f0e9ec7f0  0x00007f5f0e9fd7a8  Yes (*)     /usr/java/jdk1.8.0_102/jre/lib/amd64/libzip.so
0x00007f5ef2822a10  0x00007f5ef2830c68  Yes (*)     /usr/java/jdk1.8.0_102/jre/lib/amd64/libnet.so
(*): Shared library is missing debugging information.

【讨论】:

抱歉回复晚了,春节放假回到办公室时我会标记答案,因为我忘记了Jacky的密码,我自动保存了另一个密码个人电脑。祝你新年快乐:-)

以上是关于使用 Serviceability Agent 检查 JVM 核心转储时如何获取共享库列表?的主要内容,如果未能解决你的问题,请参考以下文章

Java七武器系列长生剑 -- Java虚拟机的显微镜 Serviceability Agent

OpenHarmony之 eTS FA调用 eTS ServiceAbility

FFHArkUI Service Ability开发实战详解

Atscan命令

秒表检定仪和瞬时日差检定仪使用介绍

通过 Selenium 中的 webdriver 传递用户代理