segmentation fault错误分析

来源:互联网 发布:青骑士 知乎 编辑:程序博客网 时间:2024/05/28 05:15

前段时间监控网站时,发现经常报错误,访问不了页面。运维人员就查看了一下Apache的error_log,在日志里发现经常出现segmentation fault的错误信息。线上系统出现这样的问题应该怎么解决呢?怎么样抽丝剥茧发现问题呢?

第一个要做的就是开启coredump,找到可能发现问题的地方。然后将可能发生问题的模块注释掉,确认是否就是那个问题。这一步基本上就能够定位出来是apache的那个模块发现了问题。

第二步就是要分析什么情况下会出现这个错误,找到一种必现的情况来调试。一般情况下这一步是最难的,能够找到这种必现的情况,基本上问题也就解决了。这一次比较幸运,刚好发生了一次大规模的问题,比较容易的就重现了这个问题。发现是一个搜索引擎引起的问题。这里没有什么好的方法来处理,只能是看运气了。

第三步就是分析输入输出了,看一下是什么样的输入导致了问题。网络程序主要使用tcpdump来截获输入输出流。-s 1024参数来捕获数据包的内容,-A打印可见字符。分析在错误的情况下的输入输出有什么不同。得到初步估计的情况。

第四步就是debug了,采用gdb来调试。使用run –X来执行apache。在这个过程中碰到了一个大问题,因为编译后的程序都是优化过的,调试过程中的很多中间变量被优化了,不能print值出来,还有一点就是出错的地方不一定就是真正出错的地方,可能在下一步。这样就找到了问题的地方。从后面来看,中间还走了一次弯路。看coredump的时候就应该能定位出问题的所在了,而不应该是后续的这么多步骤了。


原创粉丝点击