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 可以看到如下截图中的提示
大家可以发现如上错误中提示 是 iconv 函数造成的,猛然醒悟,因为我自己代码里面使用了这个函数
错误重现
大家看下图发现,执行结果就发现也会报错。是不是很惊讶,很刺激。我发现只有在这台机器才会出现这个错误。
解决方案
由于不知道具体是什么原因产生的(如果有哪位大神知道,麻烦告诉我下),我个人 猜测应该是这台服务器里面有某个lib库是有问题。所以只能换一个函数替换iconv。如下图