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

2017-12-22 11:23:53来源:https://www.congcong.us/post/gdb_debug_httpd_segmentation_fa作者:司马他人点击

分享

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


GDB简介

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


利用GDB命令排查问题
获取进程ID

使用ps命令获取进程号:


ps -aux | grep httpd
nobody    4254 12066  0 Nov23 ?        00:00:04 /usr/local/apache2/bin/httpd -k start
nobody    4545 12066  0 Nov23 ?        00:00:04 /usr/local/apache2/bin/httpd -k start
nobody    27191 12066  0 Nov15 ?        00:00:10 /usr/local/apache2/bin/httpd -k start
root     12066     1  0 Nov13 ?        00:00:00 /usr/local/apache2/bin/httpd -k start
 
attach附着进程命令

进入gdb命令:


sudo gdb
GNU gdb Fedora (6.8-37.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
 

attach 进程:


(gdb) attach 27191
Attaching to process 27191
 

进程进入trace状态


break命令设置断点
(gdb) break 1
 
continue命令进程继续
(gdb) continue
 
bt回溯命令
(gdb) bt
 
 

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


tailf error_log | grep 27191
[Thu Nov 30 19:30:24 2017] [notice] child pid 27191 exit signal Segmentation fault (11)
 

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


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台