php 间歇性报 Segmentation fault



缘由

    大概9月份有一个脚本总是无法正常执行完,后来手动执行总是会看到出现 “ Segmentation fault ” 错误。我就根据这个错误去搜索引擎查了下,大部分都说是内存错误,我以为是内存不够大,就修改了运行的内存。但是最后发现还是会出现这个错误。

排查错误

    这种错误一般要生成core.dump文件方便分析,如何生成?如何分析?

生成core.dump

    默认是不生成的,需要执行如下命令打开。如果再出现 上面的错误的时候 就会生成 core.dump文件(在执行命令的当前目录)

ulimit -c unlimited

gdb分析

    一般执行如下命令可以进行分析

##安装gdb
yum install gdb

##分析core文件,core.13543就是系统生成的core.dump文件
gdb php core.13543
##输入 bt 可以看到如下截图中的提示

600

大家可以发现如上错误中提示 是 iconv 函数造成的,猛然醒悟,因为我自己代码里面使用了这个函数

错误重现

    大家看下图发现,执行结果就发现也会报错。是不是很惊讶,很刺激。我发现只有在这台机器才会出现这个错误。

600

解决方案

    由于不知道具体是什么原因产生的(如果有哪位大神知道,麻烦告诉我下),我个人 猜测应该是这台服务器里面有某个lib库是有问题。所以只能换一个函数替换iconv。如下图

600

php centos
编程浪子走四方:CodeRonin