本文翻译自: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。格式在不同的发布版之间可能不同。
C.3 头格式
头章节在每个致命错误日志文件的开头,包含了问题的简要描述。头也会被输出到标准输出,可能会出现了应用程序的输出日志里。
头包含一个到 HotSpot 虚拟机错误报告页面的链接,在那里用户可以提交bug报告。
下面的一个崩溃的头示例:
~~~
#
An unexpected error has been detected by Java Runtime Environment:
#
SIGSEGV (0xb) at pc=0x417789d7, pid=21139, tid=1024
#
Java VM: Java HotSpot(TM) Client VM (1.6.0-rc-b63 mixed mode, sharing)
Problematic frame:
C [libNativeSEGV.so+0x9d7]
#
If you would like to subm
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。