使用 jmap(1.5) 从 java 核心转储中提取信息

2023-11-22

长话短说,一些同事正在运行一个相当旧的设置(x86_64 中的 oc4j jdk1.5.6),其应用程序恰好是关键任务。他们最近尝试部署应用程序的新版本,但一旦他们这样做,java 进程就会抛出核心转储并死掉。

问题是,核心转储似乎没问题,gdb 可以打开它们,但 jmap 和其他工具拒绝处理它们:

# /usr/java/jdk1.5.0_06/bin/jmap /usr/java/jdk1.5.0_06/bin/java core
Attaching to core core from executable /usr/java/jdk1.5.0_06/bin/java, please wait...
Error attaching to core file: Can't attach to the core file

新版本会抛出异常:

# jdk1.6.0_45/bin/jmap /usr/java/jdk1.5.0_06/bin/java core
Attaching to core core from executable /usr/java/jdk1.5.0_06/bin/java, please wait...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.tools.jmap.JMap.runTool(JMap.java:179)
        at sun.tools.jmap.JMap.main(JMap.java:110)
Caused by: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 20.45-b01. Target VM is 1.5.0_06-b05
        at sun.jvm.hotspot.runtime.VM.checkVMVersion(VM.java:224)
        at sun.jvm.hotspot.runtime.VM.<init>(VM.java:287)
        at sun.jvm.hotspot.runtime.VM.initialize(VM.java:357)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:594)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:494)
        at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:348)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:169)
        at sun.jvm.hotspot.tools.PMap.main(PMap.java:67)
        ... 6 more

gdb 提供的没有符号的信息很少:

Reading symbols from /usr/java/jdk1.5.0_06/bin/java...(no debugging symbols found)...done.

[New Thread 9841]
[New Thread 31442]
[New Thread 31441]
...
Core was generated by `/usr/java/jdk1.5.0_06/bin/java -server -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeR'.
Program terminated with signal 6, Aborted.
#0  0x0000003bbf030285 in ?? ()
(gdb) bt
#0  0x0000003bbf030285 in ?? ()
#1  0x0000003bbf031d30 in ?? ()
#2  0x0000000000000000 in ?? ()

我从核心收集到的唯一有价值的信息是大多数线程 被屏蔽了(我离成为 gdb 大师还很远):

  35 Thread 10093  0x0000003bbfc0b1c0 in pthread_cond_timedwait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0
  34 Thread 10097  0x0000003bbfc0b1c0 in pthread_cond_timedwait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0
  33 Thread 10099  0x0000003bbfc0b1c0 in pthread_cond_timedwait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0

另外,我不知道这是否真的相关。该应用程序几乎总是负载很重,我敢打赌已经存在一些锁争用,但由于它是另一个团队的应用程序,我对它的了解非常肤浅。

我想这是一个不太可能的事情,但是我们可以做些什么来获取 java 线程转储或类似的东西吗? Sun过去是否提供jdk的debuginfo,我猜现在openjdk可以提供该信息?

提前致谢。

UPDATE:另一个团队在没有从核心转储中获取信息的情况下解决了该问题,只是在测试系统中成功复制问题后通过反复试验。我仍然对这件事很感兴趣:如何调试 jmap 无法处理的古老的 java 核心转储,它可能对未来有价值的信息,尽管似乎没有解决该问题的方法。可能是 JVM 内存已损坏,这就是 jmap 无法处理它的原因。


您可以在启动应用程序时添加以下 JVM 选项,这将允许您在发生致命 JVM 错误时运行指定的任何命令:

-XX:OnError="<cmd args>"

例如,您可以运行一个命令(或脚本)来执行某些操作,例如获取堆或线程转储。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jmap(1.5) 从 java 核心转储中提取信息 的相关文章

  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • 使用替换字符串中多个单词的最有效方法[重复]

    这个问题在这里已经有答案了 此刻我正在做 Example line replaceAll replaceAll cat dog replaceAll football rugby 我觉得那很丑 不确定有更好的方法吗 也许循环遍历哈希图 ED
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • 在 C++ 中创建矩阵的正确方法

    我想为图创建一个邻接矩阵 因为我读过 使用以下形式的数组是不安全的matrix x y 因为它们不检查范围 所以我决定使用 stl 的向量模板类 我需要在矩阵中存储的只是布尔值 所以我的问题是 如果使用std vector
  • Jenkins REST buildWithParameters 覆盖默认参数值的 JSON 格式是什么

    我可以通过发送 POST 调用来使用其参数的默认值构建 Jenkins 作业http jenkins 8080 view Orion phase 2 job test remote api triggerring buildWithPara
  • Django Rest 框架不断返回嵌套关系错误

    盯着我的代码很长一段时间 我一直遇到同样的错误 有趣的是 我为模型的另一部分制作了一组类似的序列化器 并且它们工作得很好 这是我不断收到的错误 onderhoudapi conditiedeel json 处的 AttributeError
  • 在 VSTS 中运行 xunit.net 测试

    我运行时遇到问题xunit net测试在VSTS 运行构建计划时 Test assemblies步骤产生以下日志 2017 03 21T12 11 39 3302859Z section 开始 测试组件2017 03 21T12 11 39
  • 如何使用 lucene.net 实现多个过滤器的搜索

    我是 lucene net 的新手 我想在客户端数据库上实现搜索功能 我有以下场景 用户将根据当前选择的城市搜索客户 如果用户想要搜索其他城市的客户 则必须更换城市并重新进行搜索 为了细化搜索结果 我们需要提供针对区域 多个 Pincode
  • 滚动时检测 RecyclerView 何时到达最底部位置

    我有 RecyclerView 的代码 recyclerView RecyclerView rootview findViewById R id fabric recyclerView recyclerView setLayoutManag
  • Eclipse 项目中缺少 Maven 依赖项

    我们用maven建立了一个项目来解决依赖关系 它通常工作正常 但现在我尝试在新 PC 上编译并运行它 但我遇到了 Eclipse 中缺少依赖项的问题 有趣的是 如果我在控制台或 Eclipse 中运行 mvn package 它工作正常 甚
  • 具有 API 的开源论坛

    有人对基于 PHP Python 或 J2EE 的网络论坛有什么建议吗 该论坛具有良好的 API 可以通过编程方式创建用户和论坛主题 phpBB第一个想到的就是开源 因为它是免费的 实际上 几乎所有论坛平台都有某种 api 您可以通过编程方
  • APC 与 PHP 5.4 或 PHP 5.5 兼容吗?

    APC 似乎没有更新以与 php 5 4 版本一致 我希望他们像最初计划的那样将 APC 包含在 PHP 核心中 对于当前 APC 是否适用于 php 5 4 我似乎找不到任何明确的答案 我设法找到 php 5 4 的 Ubuntu 软件包
  • 如何将 Angular JS 集成到 Grails 2.3.4 中?

    我正在运行grails 2 3 4并考虑将 angularjs 集成到我的下一个应用程序中 我认为从服务器端来说最好的方法是使用grailsREST域和控制器类中的集成 然而我被困在这里了 如何让 grails 与 angularjs 进行
  • 为什么从 int 到 float 的转换会对值进行四舍五入?

    我正在阅读 CS APP 关于演员阵容 它说在演员阵容时从int到float 数字不能溢出 但可能会被四舍五入 这对我来说很奇怪 因为我不知道要舍入什么 所以我尝试了一下 我认为这只适用于非常大的整数 接近INT MAX INT MIN 但
  • 从 Excel 文档中的代码隐藏访问 ActiveX 或 Form 对象(文本框)

    Excel 文件中有几个作为 ActiveX 对象的文本框 我想从代码隐藏中访问它们 我正在将 ClosedXML 用于其他领域 但我愿意接受其他建议 要从 C 访问 OLE 对象 请添加对 Microsoft Forms 2 0 对象库的
  • Caliburn.Micro。使用 Autofac 自动为 IHandle 实现者调用 eventaggregator.Subscribe()

    In Caliburn Micro作者的文档提到了这种可能性 文档链接 IHandle继承自标记接口IHandle 这允许使用强制转换来确定对象实例是否订阅任何事件 如果您与 IoC 容器集成 这可以实现简单的自动订阅 大多数 IoC 容器
  • 使用javascript将base64字符串转换为图像

    正在使用 Titanium 开发一个应用程序 我需要将从 JSON 获取的 Base64 字符串转换为图像 我们将非常感谢您的帮助 你可以只创建一个img元素并改变它的src与所需的数据 img src
  • 测试单个数值向量的所有元素之间的相等性

    我正在尝试测试向量的所有元素是否彼此相等 我提出的解决方案似乎有些迂回 都涉及检查length x lt c 1 2 3 4 5 6 1 FALSE y lt rep 2 times 7 TRUE With unique length un
  • 如何将 Paytm 钱包集成到 Android 应用程序中? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想将 Paytm 钱包集成到 Android 应用程序中作为支付选项 就像在 Uber 应用程序中一样 谁能帮我吗 提前致谢 Update Paytm 现已添加文档 https
  • iPhone 喜欢 WPF 项目中的红色徽章通知吗?

    I have a C WPF project which generates daily and weekly reports automatically I want to inform the user when new reports
  • 达特朗等待不止一个未来

    我想在未来的很多功能完成后做一些事情 但我不知道dart中的代码如何编写 代码是这样的 for var d in data d loadData then when all loaded do something here 但我不想一一等待
  • Ajax POST 方法将字符串中的“+”值转换为“”,为什么?

    我不明白为什么在 ajax 中 号会转换为 请解释一下 Use the encodeURIComponent 函数将您的数据转换为请求的有效编码数据 xhr open POST url true xhr send encodeURIComp
  • 使用 jmap(1.5) 从 java 核心转储中提取信息

    长话短说 一些同事正在运行一个相当旧的设置 x86 64 中的 oc4j jdk1 5 6 其应用程序恰好是关键任务 他们最近尝试部署应用程序的新版本 但一旦他们这样做 java 进程就会抛出核心转储并死掉 问题是 核心转储似乎没问题 gd