当前位置: 首页 > 面试题库 >

使用gcore进行的核心转储,将jmap转换为hprof文件格式失败并显示错误消息

芮化
2023-03-14
问题内容

最近,我们发生了JVM崩溃之一,留下了由gcore命令生成的核心转储文件。我们希望查看文件的内容,并找出导致崩溃的确切原因。

使用该jmap命令,您应该能够将核心转储文件转换为hprof文件格式的文件,然后可以使用VisualVM和许多其他工具进行分析。我已经尝试过此操作并收到错误消息。这是我运行的命令(使用相同的JVM在崩溃发生的同一框):

jmap -dump:format=b,file=dump.hprof /usr/java/jdk1.6.0_16/bin/java core.dump.2878

整个响应是:

> Attaching to core core.dump.8483 from executable /usr/java/jdk1.6.0_16/bin/java, please wait...
> Error attaching to core file: Can't attach to the core file

那不是一个非常有用的错误消息。我想知道这是否是权限问题,但是我收到的命令运行命令与运行导致核心转储的JVM的用法相同。我也想知道核心文件是否已损坏,因此决定使用gdb是否可以打开核心文件并查看其中的内容。这是我得到的:

> gdb
GNU gdb(GDB)红帽企业版Linux(7.0.1-37.el5_7.1)
许可证GPLv3 +:GNU GPL版本3或更高版本 
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,没有任何担保。输入“显示复制”
和“显示保修”了解详情。
该GDB被配置为“ x86_64-redhat-linux-gnu”。
有关错误报告的说明,请参见:
<http://www.gnu.org/software/gdb/bugs/>。
(gdb)核心文件core.dump.8483
[新主题2889]
[新主题2893]
[新主题2894]
[新主题2895]
[新线程2896]
[新主题2904]
[新主题2915]
[新主题2916]
[新线程2917]
[新线程2921]
[新线程2922]
[新主题3175]
[新主题3239]
[新线程3252]
[新主题3258]
[新主题3260]
[新主题3356]
[新主题3509]
[新主题3510]
[新主题3514]
[新线程3523]
[新线程3541]
[新线程3542]
[新线程3543]
[新线程4022]
[新主题4057]
[新主题4058]
[新主题4077]
[新线程4078]
[新主题4079]
[新线程4080]
[新主题6128]
[新主题6140]
[新主题6162]
[新线程6376]
[新主题6389]
[新主题6408]
[新线程6422]
[新主题6429]
[新线程6451]
[新主题6497]
[新主题6513]
[新主题6514]
[新主题6516]
[新主题6517]
[新线程6532]
[新线程6533]
[新主题6665]
[新主题6675]
[新主题6676]
[新主题6687]
[新主题6689]
[新主题6692]
[新线程6706]
[新主题6707]
[新线程6735]
[新主题6736]
[新线程7033]
[新主题7034]
[新线程7056]
[新主题7077]
[新主题7079]
[新主题7080]
[新主题7082]
[新主题7089]
[新主题7090]
[新主题7091]
[新主题7092]
[新主题7103]
[新主题7105]
[新主题7107]
[新主题7108]
[新主题7116]
[新主题7229]
[新主题7308]
[新主题7493]
[新线程7505]
[新主题7510]
[新线程7511]
[新主题7517]
[新线程7523]
[新线程7604]
[新线程7617]
[新线程7618]
[新线程7619]
[新线程8676]
[新线程8693]
[新主题8700]
[新线程8851]
[新线程8860]
[新主题8887]
[新主题9007]
[新主题9118]
[新主题9119]
[新主题9120]
[新线程9413]
[新线程9427]
[新主题9495]
[新线程9508]
[新主题9519]
[新线程9535]
[新线程9536]
[新线程9537]
[新线程9554]
[新线程9556]
[新线程9659]
[新线程9660]
[新主题9663]
[新主题9664]
[新主题9665]
[新主题9666]
[新线程9667]
[新主题9668]
[新主题9669]
[新线程9670]
[新线程9671]
[新线程9678]
[新线程9870]
[新主题9953]
[新线程9998]
[新主题10002]
[新主题10118]
[新主题10119]
[新主题10122]
[新主题10149]
[新主题10152]
[新主题10155]
[新主题10176]
[新主题10178]
[新主题10179]
[新主题10180]
[新主题10182]
[新主题10194]
[新主题10195]
[新主题10196]
[新主题10198]
[新主题10199]
[新主题10200]
[新线程10201]
[新主题10202]
[新主题10203]
[新主题10205]
[新主题10206]
[新主题10244]
[新主题10246]
[新主题10247]
[新主题10248]
[新主题10249]
[新线程10251]
[新线程10252]
[新主题10254]
[新主题10255]
[新主题10256]
[新主题10257]
[新主题10258]
[新主题10259]
[新主题10260]
[新线程10261]
[新主题10262]
[新主题10263]
[新主题10264]
[新主题10265]
[新主题10267]
[新主题10268]
[新主题10269]
[新主题10271]
[新主题10476]
[新主题10477]
[新主题10479]
[新线程10552]
[新主题10607]
[新线程10611]
[新主题10612]
[新线程10613]
[新线程10615]
[新线程10617]
[新线程10623]
[新线程10624]
[新线程10625]
[新线程10641]
[新主题10642]
[新主题10649]
[新主题10736]
[新主题10742]
[新线程10756]
[新主题10758]
[新线程10760]
[新线程10761]
[新线程10762]
[新主题11278]
[新线程11412]
[新主题11513]
[新主题11514]
[新主题2878]
(gdb)退出

然后我退出了,因为我完全不知道gbd如何使用它来诊断此类问题。我什至不十分了解最后一条命令的作用。值得注意的是,输出中恰好有134条“新线程”行,并且,如果每行代表JVM中产生的新线程,则这可能是JVM死亡的原因。

所以我的问题实际上是三折-

1)知道为什么该jmap命令可能会给出该错误消息吗?

2)任何想法gdb输出意味着什么?

3)有什么想法可以gdb用来进一步诊断这个问题吗?


问题答案:

顺便说一句,jvisualvm可以直接加载核心转储。但是您必须使用与创建核心文件相同的jvm



 类似资料:
  • 我得到了错误 我在文件夹中执行此操作。当我在另一台计算机上运行相同的命令时,一切都很好。问题是什么?

  • 最近我们的一个jvm崩溃了。生成了一个核心文件。我想看看那个文件,找出坠机的原因。但我无法分析核心。我用jmap分析了它。然后写下命令-: jmap-转储:格式=b,文件=heap.hprof核心22234 但是我一直在例外: 从可执行核心附加到核心22234,请等待...附加到核心文件的错误: Windbg错误: OpenDumpFile失败! 我的windows系统中有核心文件。我想在那里分析

  • 问题内容: 我有一个在Windows环境中开发的应用程序。该应用程序本身已部署到Linux环境。每次部署此应用程序时,都必须使用dos2unix将可执行文件转换为UNIX格式。我最初以为这是Windows CP1252编码引起的,所以我更新了Maven以将文件编码为UTF-8。这并不能解决我的问题,我很快通过搜索此站点发现与回车和换行有关。有没有办法让Maven在构建过程中将所有文件转换为UNIX

  • 问题内容: 我是python的新手,正在遇到一个奇怪的错误: 当我执行以下代码时: 这部分代码是从程序的stdout中读取的。当我在线程外执行 时,它将起作用!但是当我在fais线程中执行它时…有什么建议吗? 问题答案: 是当程序退出并带有信号并且启用了核心创建时Linux打印的字符串。这意味着 某些 程序已崩溃。 如果您实际上是通过运行Python遇到此错误,则意味着Python解释器已崩溃。发

  • 问题内容: 有时,当我运行代码时,用+ 终止程序会生成一个核心转储文件。文件名的格式为。该程序不会突然终止,并且没有分段错误。我认为这是不和。如果我尝试+ 或+ ,则不会生成。 谁能说出为什么仅在按+ 时才生成?如何避免生成此核心转储文件?核心转储文件有什么用? 问题答案: 当进程由于程序故障而被操作系统终止时,进程将转储核心。发生这种情况的最典型原因是因为程序访问了无效的指针值。鉴于您有一个零星

  • 问题内容: 每次我的应用程序崩溃时,都不会生成核心转储文件。我记得几天前,它 是 在另一台服务器 上 生成的。我正在使用bash屏幕运行应用程序,如下所示: 如您所见,如果要生成核心转储,则在使用哪个选项很重要,但是当遇到分段错误时,它仍然不会生成。我该如何运作? 问题答案: 确保当前目录(崩溃时可能会更改目录)是可写的。如果服务器调用,则该目录必须是该用户可写的。 同时检查。这可能会将核心转储重