Jetty因段错误崩溃,求助分析core dump及指定gdb可执行文件
关于Jetty Java应用段错误的GDB分析及排查指导
一、GDB命令中executable的指定
崩溃进程为Java虚拟机进程(日志显示Process 32201 (java)),因此gdb命令中的executable需要指定Java可执行文件的路径:
- 先通过
which java获取系统默认Java命令的具体路径,比如输出为/usr/bin/java,则完整命令为:
gdb /usr/bin/java core-file
- 如果使用自定义JDK,替换为对应JDK目录下的
bin/java路径即可。
二、额外排查指导(应用日志信息不足时)
优先查找JVM崩溃日志
Java进程崩溃时默认会生成hs_err_pid<进程ID>.log(对应本次崩溃的文件为hs_err_pid32201.log),该文件通常位于应用工作目录、/tmp目录或JVM启动参数指定的路径下。文件包含崩溃时的线程栈、内存信息、JVM参数、系统库加载情况等关键内容,是排查Java段错误的核心参考资料。GDB分析核心转储的关键操作
加载core文件后,执行以下命令获取有效信息:
- 查看所有线程的调用栈,定位崩溃线程(标记为
*的线程):
thread apply all bt
- 查看加载的共享库信息,确认Jetty或应用依赖的本地库版本:
info sharedlibrary
- 针对崩溃线程,查看其本地栈帧,重点关注是否存在JNI(Native)代码调用、JVM内部模块或系统库的异常。
- 常见排查方向
- JNI代码问题:若应用或Jetty使用了自定义Native扩展,检查JNI代码是否存在内存越界、空指针引用等问题。
- JVM版本兼容性:尝试升级至对应JDK的最新稳定版本,排查是否为JVM已知Bug导致的崩溃。
- 系统库冲突:检查系统中安装的依赖库(如OpenSSL等Jetty常用库)版本是否与JVM或Jetty兼容。
- 硬件内存故障:通过
memtest等工具排查服务器内存是否存在硬件问题。
用户提供的崩溃日志:
May 26 07:33:49 filr jetty.sh[32201]: 2024-05-26 07:33:49.813:INFO::main: Redirecting stderr/stdout to /var/opt/jett> May 26 07:33:49 filr jetty.sh[32201]: 2024-05-26 07:33:49.813:DBUG:oejx.XmlConfiguration:main: XML call setErr May 26 07:34:39 filr systemd-coredump[32747]: [🡕] Process 32201 (java) of user 469 dumped core. May 26 07:34:39 filr systemd[1]: vabase-jetty.service: Main process exited, code=killed, status=11/SEGV May 26 07:34:39 filr systemd[1]: vabase-jetty.service: Failed with result 'signal'.
内容的提问来源于stack exchange,提问作者user6903099
相关产品推荐
相关产品推荐

