CentOS上Ja va日志中的错误码,归根结底可以分成两大类:一类是JVM级别的致命错误码,比如信号编号、EXCEPTION_这类,它们通常藏在hs_err_pid*.log这种崩溃日志里;另一类是大家更熟悉的Ja va异常类名,像NullPointerException、OutOfMemoryError这些,一般出现在应用或容器日志中,比如catalina.out、application.log。以下是一份对照与定位的实用指南。

常见JVM致命错误码与含义
- SIGSEGV(信号编号0xb):段错误,说白了就是非法内存访问。问题通常出在JNI或本地库上,也可能是内存损坏或指针操作失误。如果崩溃日志里“Problematic frame”指向libjvm.so,那多半是JVM自身的缺陷;如果指向的是第三方*.so,那基本可以断定是本地代码的问题。
- SIGBUS(信号编号0xa):总线错误,典型的场景是未对齐的内存访问,或者访问了一个已经被截断的映射文件。
- EXCEPTION_ACCESS_VIOLATION:Windows平台上的常见问题,本质上与内存访问违规是一回事。
- EXCEPTION_STACK_OVERFLOW:栈溢出,深度递归或者线程栈设置得过小,都容易触发。
- 日志关键字段:
- pid/tid:进程ID和线程ID,帮你锁定具体哪个线程出了问题。
- pc:程序计数器,指向发生故障的指令地址。
- Problematic frame:问题帧,明确指示崩溃发生在Ja va、本地库还是JVM内部。
- 示例线索:
- “Problematic frame: V [libjvm.so+…]” → 问题很可能在JVM内部。
- “Problematic frame: C [libxxx.so+…]” → 问题出在本地库上。
- “si_code: 1 (BUS_ADRALN)” → 说明是SIGBUS中的未对齐访问。
以上这些信号和字段,在hs_err_pid.log的文件头部和线程信息段都能找到。
常见Ja va异常类名与含义
- NullPointerException:试图访问为null的对象。
- ArrayIndexOutOfBoundsException:数组下标越界。
- ClassNotFoundException:类路径或依赖配置有问题,找不到指定类。
- SQLException:数据库访问出错,可能是连接、语法或权限问题。
- ArithmeticException:算术异常,比如除以零。
- OutOfMemoryError:JVM内存不足,堆、元空间或直接内存都有可能。
- FileNotFoundException:文件不存在,路径可能有问题。
从异常体系来看,Error(如OutOfMemoryError、StackOverflowError)通常属于致命错误,应用层面一般不建议捕获;Exception则分为受检异常(如IOException、SQLException)和运行时异常(如NPE、ArrayIndexOutOfBoundsException)。这些异常类型与应用日志中的常见输出完全一致,名字本身就是最直接的说明。
如何快速定位与应对
先判断清楚日志类型,这是最关键的第一步:
- 如果日志里出现“A fatal error has been detected”和“Problematic frame”,那就直接去找同目录下的hs_err_pid
.log 。 - 如果应用持续输出“Exception”或“ERROR”,那就去查应用或容器日志,比如catalina.out或application.log。
定位步骤可以概括为三条:
- 在hs_err_pid*.log中确认信号类型(SIGSEGV还是SIGBUS),结合pc和Problematic frame,判断问题是JVM、第三方本地库还是应用代码引起的。必要时可以配合core dump和gdb进行深入分析。
- 如果是应用异常,直接根据异常类名定位代码缺陷——空指针、越界、资源未找到,这些名字已经告诉了你问题所在。结合日志上下文,修复方向就很明确了。
- 如果怀疑系统侧的因素,就去检查/var/log/messages和abrt(CentOS下的错误报告工具),看是否收集到了崩溃信息。这对于定位内核、资源或ABRT配置问题很有帮助。
常用命令与配置:
- 查看Ja va进程和日志路径:
ps -ef | grep ja va - 指定崩溃日志路径:
-XX:ErrorFile=/var/log/hs_err_pid.log - 检查系统日志:
tail -n 200 /var/log/messages | grep -i abrt
以上流程和命令,能帮你快速从“错误码或异常名”出发,一路定位到“问题位置和修复方向”。