Tomcat崩溃排查

现象

Tomcat运行过程中出现崩溃现象,所幸服务器监控程序自动对其执行了重新启动,因此对生成环境没有造成太久的服务中断。

崩溃问题首次出现,考虑为偶然情况。然而在几日之内,Tomcat再次崩溃,因此需要调查具体崩溃原因,初步考虑后,推测是由于Tomcat运行所占内存过大,因此被系统kill,准备升级服务器。

排查

1. Tomcat内存占用过大,被系统kill。

假设是系统所为,一般会有系统日志:

cat /var/log/messages

查看后没有发现kill、mem相关日志。

2. Jvm遇到致命错误崩溃。

如果Jvm遇到致命错误而崩溃,应当会在程序目录生成hs_err_pid.log等错误报告文件:

ll tomcat/bin

查看后没有找到崩溃日志。

3. Tomcat遇到错误崩溃。

直接查看Tomcat日志:

cat tomcat/logs/catalina.out

日志量非常大,经过拆分后,定位到崩溃日期附件,终于找到蛛丝马迹:

2022-06-14 08:29:14,121 [ERROR] ControllerHelper:139 - readValue error: {g:

*** Error in `//bin/java': malloc(): memory corruption: 0x00007fb4440a1de0 ***

======= Backtrace: =========

/lib64/libc.so.6(+0x82aa6)[0x7fb50ef30aa6]

/lib64/libc.so.6(__libc_malloc+0x4c)[0x7fb50ef336fc]

/usr/lib64/libse.so(Java_com_s_Se_d+0x142)[0x7fb39abb1cec]

[0x7fb4fa7206c7]

======= Memory map: ========

00400000-00401000 r-xp 00000000 fd:01 1307450                            /usr/java/jdk1.8.0_131/jre/bin/java

00600000-00601000 rw-p 00000000 fd:01 1307450                            /usr/java/jdk1.8.0_131/jre/bin/java

00828000-009c9000 rw-p 00000000 00:00 0                                  [heap]

6c7c00000-708a00000 rw-p 00000000 00:00 0

708a00000-76d400000 ---p 00000000 00:00 0

76d400000-783080000 rw-p 00000000 00:00 0

783080000-7c0000000 ---p 00000000 00:00 0

7c0000000-7c1580000 rw-p 00000000 00:00 0

7c1580000-800000000 ---p 00000000 00:00 0

7fb32db7e000-7fb32db81000 ---p 00000000 00:00 0

7fb32db81000-7fb32dc7f000 rw-p 00000000 00:00 0

7fb32dc7f000-7fb32dc82000 ---p 00000000 00:00 0

由此可见,Tomcat在运行过程中,底层代码库(so文件)遇到了内存错误,从而导致Tomcat崩溃,具体而言,出错的库文件如下:

usr/lib64/libse.so(Java_com_s_Se_d+0x142)[0x7fb39abb1cec]

即libse.so库文件存在问题,该库文件非系统自带,为业务底层代码库,因此修复之即可。

猜你喜欢

转载自blog.csdn.net/Dancen/article/details/125388556