AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 110153
In Process
karlcyr
karlcyr
Asked: 2010-02-06 20:42:35 +0800 CST2010-02-06 20:42:35 +0800 CST 2010-02-06 20:42:35 +0800 CST

如何可靠地获取 Java 堆转储?

  • 772

我的团队在尝试处理由 OutOfMemoryErrors 触发的良好堆转储时遇到了困难。出于特定原因,我们目前使用从 bash 脚本调用的 jmap 进行转储,而不是使用 HeapDumpOnOutOfMemoryError 标志。我们使用的是 64 位 1.6 JVM,堆大小约为 3 GB。我们的堆转储在 90% 的情况下都会失败(估计)。

我们可以做些什么来提高获得干净堆转储的几率,我们可以用它来解决内存问题?我读过 jmap 在 Java 1.4 中存在重大问题,但现在应该主要解决这些问题。

java outofmemoryerror dump oom
  • 5 5 个回答
  • 17053 Views

5 个回答

  • Voted
  1. fglez
    2010-03-24T09:37:46+08:002010-03-24T09:37:46+08:00

    你的操作系统是哪个?(我不能添加评论)。

    gcore <pid>对于 Solaris,我们首先强制执行核心转储 ( ),然后将 jmap 附加到核心转储文件 ( jmap -heap:format=b <path to java bin> <path to core>) ,从而获得更好的结果

    gcore是一个 *nix 实用程序,用于生成正在运行的程序的图像。见链接。

    • 7
  2. rytis
    2010-02-07T00:41:41+08:002010-02-07T00:41:41+08:00

    我们有一个查询 ManagementFactory.getThreadMXBean() 并生成报告的 JSP。当应用程序崩溃时可能没有用,但如果您每分钟左右进行一次轮询,您就会了解正在发生的事情。

    更多信息在这里。

    • 2
  3. Christian
    2010-02-07T06:43:12+08:002010-02-07T06:43:12+08:00

    您可以从外部通过 jmx 监控您的应用程序。当您知道一些指示即将发生 OutOfMemory 的指标时,您可以在抛出异常之前触发 jmap 运行。

    • 2
  4. karlcyr
    2010-04-08T09:38:32+08:002010-04-08T09:38:32+08:00

    感谢大家的建议。

    我们最终要做的是编写一个脚本来主动监控垃圾收集日志。根据我们的经验,背靠背的 Full GC 几乎总是在 OOM 之前发生,因此我们的脚本会检测到此事件,从负载平衡池中优雅地删除服务器,并强制进行堆转储。这大大提高了我们的效率。

    • 2
  5. Nick Hristov
    2012-10-19T16:59:13+08:002012-10-19T16:59:13+08:00

    这是一个相当老的问题,但我会回答,希望有人会觉得这很有用。

    jmap 有一个 -F 选项(强制)。事实证明,这在过去对我来说效果不佳。如果您要使用 -F 选项,我建议您还将 java.io.tmp 目录指定为 jmap 命令的一部分。JVM 版本 1.6.22 存在问题,其中 jmap 实用程序由于临时目录设置而无法正常工作。

    您也可以尝试通过 gdb 进行核心转储。拥有核心后,jmap 可以将核心转换为堆转储。

    • 2

相关问题

  • jvm性能调优技巧/资源?

  • Linux 服务器上的多个*几乎*相同的进程

  • 您认为 Linux 服务器上的 Java 是个问题吗?[关闭]

  • 如何定期复制 SVN 存储库而不会丢失目标标签和分支?

  • GlassFish 更改 Web 服务的端口

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve