JVM致命错误日志(hs_err_pid.log)分析
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
查 看 系 liunx 统 日 志 messages
crash发生于11:26:33
查 看 业 java 务 日 志 busi.log
11:26:33处理了两次同一个PDF文件 结论:线程JavaThread "upp-task-Orders-9"试图访问的PDF文件无文件内容对应的内存区域,并发处理有问题.
背景
并发线程处理PDF文件,jvm出现致命错误时,生成错误文件 hs_err_pid.log。 SIGBUS意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。
查 看 日 hs_err_pid.log 志
这里一个重要信息是SIGBUS(0x7)表示jvm crash时正在执行线程试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者 以前有文件内容对应,现在为另一进程截断过的内存区域。其中SISBUS是信号名称,0x7是信号码,pc=0x00007fa4495592a0指的是程序计数 器的值,pid=34372是进程号,tid=0x00007fa320cd2700是线程号。 文件下面是导致crash的线程信息和该线程栈信息,描述信息如下:
Current thread (0x00007fa348028000): JavaThread "hlooc-task-Orders-9" daem007fa320bd2000,0x00007fa320cd3000)
siginfo: si_signo: 7 (SIGBUS), si_code: 2 (BUS_ADRERR), si_addr: 0x00007fa449e29041
请求出错错误代码400请尝试刷新页面重试
JVM致命错误日志( hs_err_pid.log)分析 JVM致命错误日志 (hs_err_pid.log)分析
当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导 致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下.
以上表示导致出错的线程是0x00007fa348028000(指针),线程类型是JavaThread,JavaThread表示执行的是java线程,关于该线程其它类型 还可能是: VMThread:jvm的内部线程 CompilerThread:用来调用JITing,实时编译装卸class 。 通常jvm会启动多个线程来处理这部分工作,线程名称后面的数字也会累加,例 如:CompilerThread1 GCTaskThread:执行gc的线程 WatcherThread:jvm周期性任务调度的线程,是一个单例对象。 该线程在JVM内使用得比较频繁,比如:定期的内存监控、JVM运行状况监 控,还有我们经常需要去执行一些jstat 这类命令查看gc的情况 ConcurrentMarkSweepThread:jvm在进行CMS GC的时候,会创建一个该线程去进行GC,该线程被创建的同时会创建一 个SurrogateLockerThread(简称SLT)线程并且启动它,SLT启动之后,处于等待阶段。CMST开始GC时,会发一个消息给SLT让它去获 取Java层Reference对象的全局锁:Lock 后面的hlooc-task-Orders-9表示线程名,daemon表示该线程为守护线程,再后面的[_thread_in_vm表示线程正在执行虚拟机代码,关于该描述 其它类型还可能是: _thread_in_native:线程当前状态 _thread_uninitialized:线程还没有创建,它只在内存原因崩溃的时候才出现 _thread_new:线程已经被创建,但是还没有启动 _thread_in_native:线程正在执行本地代码,一般这种情况很可能是本地代码有问题 _thread_in_vm:线程正在执行虚拟机代码 _thread_in_Java:线程正在执行解释或者编译后的Java代码 _thread_blocked:线程处于阻塞状态 …_trans:以_trans结尾,线程正处于要切换到其它状态的中间状态 最后的id=37394表示线程ID,stack(0x00007fa320bd2000,0x00007fa320cd3000)表示栈区间。 siginfo: si_signo: 7 (SIGBUS), si_code: 2 (BUS_ADRERR), si_addr: 0x00007fa449e29041这部分是导致虚拟机终止的非预期的信号信息:其 中si_signo和si_code是Linux下用来鉴别异常的 日志头文件包含概要信息,简述了导致crash的原因。而导致crash的原因很多,常见的原因有jvm自身的bug,应用程序错误,jvm参数配置不 当,服务器资源不足,jni调用错误,线程试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以前有文件内容对 应,现在为另一进程截断过的内存区域。
crash发生于11:26:33
查 看 业 java 务 日 志 busi.log
11:26:33处理了两次同一个PDF文件 结论:线程JavaThread "upp-task-Orders-9"试图访问的PDF文件无文件内容对应的内存区域,并发处理有问题.
背景
并发线程处理PDF文件,jvm出现致命错误时,生成错误文件 hs_err_pid.log。 SIGBUS意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。
查 看 日 hs_err_pid.log 志
这里一个重要信息是SIGBUS(0x7)表示jvm crash时正在执行线程试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者 以前有文件内容对应,现在为另一进程截断过的内存区域。其中SISBUS是信号名称,0x7是信号码,pc=0x00007fa4495592a0指的是程序计数 器的值,pid=34372是进程号,tid=0x00007fa320cd2700是线程号。 文件下面是导致crash的线程信息和该线程栈信息,描述信息如下:
Current thread (0x00007fa348028000): JavaThread "hlooc-task-Orders-9" daem007fa320bd2000,0x00007fa320cd3000)
siginfo: si_signo: 7 (SIGBUS), si_code: 2 (BUS_ADRERR), si_addr: 0x00007fa449e29041
请求出错错误代码400请尝试刷新页面重试
JVM致命错误日志( hs_err_pid.log)分析 JVM致命错误日志 (hs_err_pid.log)分析
当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导 致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下.
以上表示导致出错的线程是0x00007fa348028000(指针),线程类型是JavaThread,JavaThread表示执行的是java线程,关于该线程其它类型 还可能是: VMThread:jvm的内部线程 CompilerThread:用来调用JITing,实时编译装卸class 。 通常jvm会启动多个线程来处理这部分工作,线程名称后面的数字也会累加,例 如:CompilerThread1 GCTaskThread:执行gc的线程 WatcherThread:jvm周期性任务调度的线程,是一个单例对象。 该线程在JVM内使用得比较频繁,比如:定期的内存监控、JVM运行状况监 控,还有我们经常需要去执行一些jstat 这类命令查看gc的情况 ConcurrentMarkSweepThread:jvm在进行CMS GC的时候,会创建一个该线程去进行GC,该线程被创建的同时会创建一 个SurrogateLockerThread(简称SLT)线程并且启动它,SLT启动之后,处于等待阶段。CMST开始GC时,会发一个消息给SLT让它去获 取Java层Reference对象的全局锁:Lock 后面的hlooc-task-Orders-9表示线程名,daemon表示该线程为守护线程,再后面的[_thread_in_vm表示线程正在执行虚拟机代码,关于该描述 其它类型还可能是: _thread_in_native:线程当前状态 _thread_uninitialized:线程还没有创建,它只在内存原因崩溃的时候才出现 _thread_new:线程已经被创建,但是还没有启动 _thread_in_native:线程正在执行本地代码,一般这种情况很可能是本地代码有问题 _thread_in_vm:线程正在执行虚拟机代码 _thread_in_Java:线程正在执行解释或者编译后的Java代码 _thread_blocked:线程处于阻塞状态 …_trans:以_trans结尾,线程正处于要切换到其它状态的中间状态 最后的id=37394表示线程ID,stack(0x00007fa320bd2000,0x00007fa320cd3000)表示栈区间。 siginfo: si_signo: 7 (SIGBUS), si_code: 2 (BUS_ADRERR), si_addr: 0x00007fa449e29041这部分是导致虚拟机终止的非预期的信号信息:其 中si_signo和si_code是Linux下用来鉴别异常的 日志头文件包含概要信息,简述了导致crash的原因。而导致crash的原因很多,常见的原因有jvm自身的bug,应用程序错误,jvm参数配置不 当,服务器资源不足,jni调用错误,线程试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以前有文件内容对 应,现在为另一进程截断过的内存区域。