本文翻译自:http://www.oracle.com/technetwork/java/javase/felog-138657.html
本文内容基于 Java SE 6,HotSpot JVM。
当一个致命错误发生时,一个错误日志将被创建,存储了在致命错误发生时获取到的信息和状态。
注意:这个文件的格式可能随着版本的更新而改变。
C.1 致命错误日志位置
产品标志 -XX:ErrorFile=file
可以指定文件在哪里创建,file
表示了文件位置的完整路径。file
里的子字符串 %%
将被转换为 %
,%p
将被转换为进程ID。
在下面的例子里,错误日志文件将被写到 /var/log/java
目录、被命名为 java_errorPid
.log :java -XX:ErrorFile=/var/log/java/java_error%p.log
。
如果 -XX:ErrorFile=file
标志没有指定,默认的文件名是 hs_err_pid
.log,pid是进程ID。
另外,如果没有指定 -XX:ErrorFile=file
标志,系统尝试在进程的工作目录创建文件。万一不能在工作目录创建文件(空间不足、权限问题或其他问题),文件将在操作系统的临时目录里创建。在Solaris和Linux上临时目录是 /tmp
。在Windows上临时目录由环境变量 TMP
指定;如果那个环境变量没有指定,将使用 TEMP
环境变量。
C.2 致命错误日志描述
错误日志包含在致命错误发生时获取到的信息,如果可能,包括下面的信息:
- 操作异常或激起致命错误的信号
- 版本信息和配置信息
- 激起致命错误的线程细节和线程的栈痕迹trace
- 正在运行的线程列表和它们的状态
- 堆的概要信息
- 已加载的本地类库(native libraries)列表
- 命令行参数
- 环境变量
- 操作系统和CPU的细节
注意:在某些情况下,只有这些信息的子集会被输出到错误日志。这在致命错误非常严重以至于错误处理器没法回复并报告所有细节。
错误日志是一个文本文件保护下面的章节:
- 一个头提供了崩溃的简要描述。
- 一个章节描述了线程信息。
- 一个章节描述了进程信息。
- 一个章节描述了系统信息。
注意:这个致命错误日志描述的格式是基于Java SE 6。格式在不同的发布版之间可能不同。