JVM运行过程中有可能异常退出,即JVM进程忽然消失,此时通常不是Java Stack或者Java Heap出现异常,而是与OS本地堆栈有关。JVM中运行的应用系统通常难以处理此问题,但如果应用系统中使用了JNI,则有可能与此部分代码相关。
在Windows上,JVM异常退出时通常会生成“hs_err_pidXXXX.log”文件,此文件位于JVM进程的“当前路径”下(如Tomcat的bin/),可以从此文件中得到异常退出时的现象。遗憾的是,应用系统开发人员很难分析此文件,但可以根据此文件得到一些信息,或者将此文件反馈给能够分析的技术社区。
下面列举几种HotSpot JVM异常退出时产生的“hs_err_pidXXXX.log”文件中的信息:
异常一:
# An unexpected error has been detected by Java Runtime Environment:
# EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x6da3a7fd, pid=3012, tid=3108
# Java VM: Java HotSpot(TM) Client VM (11.0-b15 mixed mode windows-x86)
# Problematic frame:
# V [jvm.dll+0x18a7fd]
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp#
异常二:
# An unexpected error has been detected by Java Runtime Environment:
# java.lang.OutOfMemoryError: requested 1024000 bytes for GrET in C:\BUILD_AREA\jdk6_10\hotspot\src\share\vm\utilities\growableArray.cpp. Out of swap space?
# Internal Error (allocation.inline.hpp:42), pid=4060, tid=3816
# Error: GrET in C:\BUILD_AREA\jdk6_10\hotspot\src\share\vm\utilities\growableArray.cpp
# Java VM: Java HotSpot(TM) Client VM (11.0-b15 mixed mode windows-x86)
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
注:上面列举的JVM异常只包含部分总结性的信息,log文件中还有更多的详细信息。
HotSpot JVM之外的其他JVM是否有类似信息尚未确定,但此类问题通常应用层开发者难以解决(JNI相关应用的开发者除外)。 |