【问题标题】:What can cause hs_err_pid file not to be created on crash?什么会导致崩溃时无法创建 hs_err_pid 文件?
【发布时间】:2011-07-06 11:38:27
【问题描述】:

我需要调查 Java 客户端应用程序的崩溃。它是一个 Swing 应用程序,在 Windows 上的 Java SE 6 Update 23 上的 Java Web Start 环境中运行。不幸的是,对于某些崩溃情况,没有创建 hs_err_pid 文件。它不在桌面上,所以我在 PC 上搜索它并没有找到它(桌面上有一个旧的 hs_err_pid 文件,用于相同的应用程序,所以假设应该创建新文件是合理的那里也有)。最后日志中没有异常,因为它通常发生在JVM崩溃Java异常时,所以看起来应该是创建hs_err_pid文件导致的崩溃。

我是否需要配置一些东西才能让它工作? Dr. Watson 的配置会影响 hs_err_pid 文件的创建吗?

谢谢

我们配置了 Dr'Watson 并分析了核心转储文件,该文件是在应用再次崩溃后创建的。我看到的错误是“访问冲突”。从堆栈跟踪中,我能够看到崩溃是由我们使用的第三方的本机代码中的异常引起的。这足以将问题委托给他们。

底线:
1. JVM没有按预期处理一些Java崩溃,导致没有创建hs_err_pid文件。
2. 在这些情况下,将操作系统配置为创建核心转储会有所帮助,因为 JVM 未处理的崩溃将由操作系统处理。在这种情况下,您获得的信息会更少,但它仍然会有所帮助。

【问题讨论】:

  • JVM 因 Java 异常而崩溃 - 异常是什么,您能否在此处粘贴堆栈跟踪或代码。
  • @Suresh - 他正在尝试找到日志输出,该日志输出将为他提供有关崩溃的更多详细信息(包括异常跟踪,如果有的话)。
  • 如果进程无权访问它通常写入的目录,它就不会写入文件。
  • @Peter Lawrey 用户桌面上已经有我们应用程序的旧 hs_err_pid 文件,因此用户可以访问该目录。在某些特定条件下未创建 Looks 文件
  • 你有没有弄明白这件事?我也有这个问题。 JVM 崩溃,有核心转储,但没有 hs_err 文件。工作目录中有足够的空间和写权限(这就是核心转储文件放在那里的原因。) hs_err 文件仅在大约 50% 的时间生成。

标签: java crash


【解决方案1】:

如果崩溃是由于本机堆栈溢出(通常在应用程序尝试读取/写入堆栈保护页时导致 SIGSEGV),则在许多平台(例如 Linux)上不会生成 hs_err_pid 文件,因为如果堆栈空间不足,则创建文件的过程无法完成。

【讨论】:

  • 这不是本机堆栈溢出的情况。我们配置了 Dr' Watson 并分析了核心转储文件。我看到的错误是“访问冲突”。
  • 井访问冲突和堆栈溢出不是相互排斥的。发生堆栈溢出时会发生什么取决于操作系统、运行时环境、溢出发生的方式等。
  • 例如,在 Linux 上,堆栈溢出通常(经常?)产生 SIGSEV,这相当于 Windows 上的访问冲突。其他事情,比如错误的指针访问,可能会导致 SIGSEV,但在这些其他情况下,JVM 通常能够创建一个 hs_err_pid 文件。
【解决方案2】:

请注意,hs_err_pid.log 文件仅在发生实际 JVM 崩溃时才会创建。

如果您的应用程序“仅”由于某处未处理的异常而退出,则不会创建此类文件。

您确定崩溃是真正的 JVM 崩溃吗?

【讨论】:

  • 所有未处理的异常都会打印到日志中。当应用程序以未处理的异常退出时,我们会在日志文件的末尾看到它,在这种情况下,日志中没有异常。
【解决方案3】:

JDK 5 http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf

When a fatal error occurs an error log is created in the file

hs_err_pid.log(在哪里 进程的进程ID)。在哪里 文件可能是在 进程的工作目录。在 文件不能被 在工作目录中创建 (空间不足,权限 问题或其他问题)然后文件 在临时目录中创建 为操作系统。在 Solaris 上 而 Linux 的临时目录是 /tmp。在 Windows 上是临时的 目录由值指定 TMP 环境变量,或者如果 即未定义,的值 TEMP 环境变量。

【讨论】:

  • 用户桌面上已经有我们的应用程序的旧 hs_err_pid 文件(那是应用程序的链接所在,所以这是工作目录),因此用户可以访问该目录。看起来文件不是在某些特定条件下创建的
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2017-03-17
  • 1970-01-01
相关资源
最近更新 更多