调试利器gdb来跟踪排查进程莫名中止问题Segmentation fault

排查Apache报502问题,error_log里面的表现就是一条child pid 20504 exit signal Segmentation fault (11),apache的一个进程中断了,程序中断的很莫名其妙,因为业务逻辑是没有问题,业务上的日志也没有任何比较好的反馈,apache的日志非常简洁,没有提供什么有用的信息,如何更高效的排查这个问题呢?针对已经在运行的进程如何来调试排查,本文利用gdb来快速定位这个问题。

GDB简介

GDB是GCC的调试工具。主要提供了以下几项功能, 启动您的程序,并列出可能会影响它运行的一些信息;可以让调试的程序在你所指定的断点处停住;可以在程序停住时检查此时程序发生了什么;对程序做出相应的调整,这样您就能尝试纠正一个错误并继续发现其它错误

利用GDB命令排查问题

获取进程ID

使用ps命令获取进程号:

attach附着进程命令

进入gdb命令:

attach 进程:

进程进入trace状态

break命令设置断点

设置断点

continue命令进程继续

让程序退出trace,继续运行

bt回溯命令

终端上面显示遇到received signal SIGSEGV, Segmentation fault.

回溯整个调用栈,可以发现是在libcrypto.so.1.0.0的方法engine_unlocked_finish遇到问题

apache日志中表现 已经进程退出

小结

综合报错信息来看,每次都是在openssl的某个方法导致进程终止,openssl版本较低,目前做打算升级处理,解决此问题。

3条留言
  1. [/强]

  2. ok[/憨笑]

  3. ok