某年某月某日,一个工程师跑来找我说:很多用户抱怨APP频繁闪退,他觉得server运行正常,找不出原因,请我帮忙
按照流程一路排查下去,发现nginx访问日志里面有大量的http 504 err code
tail -f /var/log/messages
同时出现大量的类似错误信息
nginx[1234]: segfault at 0000000000000008 rip 000000000043edf8 rsp 00007fff34a21fa0 error 4
出现segfault那只能用gdb了,这也是Linux做server的好处了,换成微软平台,无比的麻烦
解决问题分成4步:
-
配置系统生成coredump文件,很简单
ulimit -a
第一行就是关于core file的设置,默认是不生成coredump文件的,执行ulimit -c 1024
即可,记得调试完成之后要用ulimit -c 0
关闭,不然你的硬盘很快会被填满
-
gdb调试,需要debug版本的nginx才能定位到源代码,于是需要重新编译一份nginx
首先把现有的nginx bin目录和conf目录都备份
然后打印nginx的原始编译选项
/opt/nginx/sbin/nginx -V
在这个基础上加上 --with-debug,重新make一份即可
在${NGINX-SOURCE-DIR}$/objs 目录中找到编译好的nginx ,复制到你的nginx运行目录,切记不要make install ,因为这样会覆盖掉你的nginx.conf文件
重新运行nginx,等待core.xxx文件生成。一般是在当前目录下生成
-
用gdb加载 coredump 文件
gdb --core=core.xxx
gdb> where
很容易就找到了nginx segfault的原因:我们自己写的一个nginx modules里面,对某些参数没有做边界检查,但外部环境变化之后,访问空指针了
收尾:
转自:http://lutaf.com/140.htm
分享到:
相关推荐
GDB调试GDB调试GDB调试GDB调试GDB调试 GDB调试GDB调试GDB调试GDB调试GDB调试
用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序
GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹及使用实例GDB调试精粹...
陈浩-用GDB调试程序(整理有书签).pdf+守望的个人博客-GDB调试指南(整理有书签).pdf
讲述常用gdb命令,以及讲述如何使用gdb调试程序崩溃后产生的core dump文件,让您在linux下开发更轻松
用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序 用GDB调试程序
gdb调试器的使用gdb调试器的使用gdb调试器的使用gdb调试器的使用gdb调试器的使用
GDB调试程序[陈皓] GDB调试工具指南 两个pdf文件
用GDB调试程序
是学习嵌入式的很好的资料哦!里面详细介绍了怎样用gdb调试程序,是嵌入式程序调试入门必备的资料!
经典实例用GDB调试程序 最经典的gdb调试实例讲解
用GDB调试程序(zt).pdf
关于linux下使用GDB调试的资料 ,非常好。
使用GDB调试,英文版。对于从事 Linux C/C++ 后台开发的读者来说,GDB 调试是需要熟练掌握的一项技能
使用gdb调试嵌入式应用程序 可使用gdb或者图形化的ddd和insight
GDB调试中文手册。GDB调试命令详述,完整的中文手册。
非常详细的介绍 Linux下gdb调试工具指南