记一次进程异常退出的问题排查

机器搬家之后,之前一直稳定的PHP多进程程序子进程突然异常退出,但是退出的不是很频繁,查看进程日志并也没有发现有什么导致退出的,问题比较诡异。于是开启了一段问题排查之路。

首先查看内核日志,使用dmesg,拉到最后发现有一些这样的错误,看来确实是崩溃了。

[4791991.998535] php[16776]: segfault at 7f6443ee18c8 ip 00007f6443ee18c8 sp 00007fff4d4ba818 error 15 in libc-2.17.so[7f6443ee1000+2000]
[4792165.192628] php[609]: segfault at 0 ip 000000000075919d sp 00007fff0c6e0578 error 4 in php[400000+94b000]
[4792423.164949] traps: php[2337] general protection ip:75919d sp:7fff0c6e0578 error:0 in php[400000+94b000]
[4793914.900298] traps: php[589] general protection ip:7576b6 sp:7fff0c6e0460 error:0 in php[400000+94b000]
[4794155.124685] php[25418]: segfault at 35007265746c ip 000000000075919d sp 00007fff0c6e0578 error 4 in php[400000+94b000]
[4794677.119847] traps: php[2314] general protection ip:75959b sp:7fff4d4ba840 error:0 in php[400000+94b000]
[4795121.747090] php[4642]: segfault at 0 ip 000000000075919d sp 00007fff0c6e0578 error 4 in php[400000+94b000]
[4795666.787427] php[2372]: segfault at 40 ip 000000000075958c sp 00007fff0c6e0500 error 4 in php[400000+94b000]
[4796212.001686] php[6224]: segfault at 10 ip 000000000075919d sp 00007fff0c6e0578 error 4 in php[400000+94b000]
[4796224.510583] traps: php[6156] general protection ip:75919d sp:7fff0c6e0578 error:0 in php[400000+94b000]
[4796337.623455] php[562]: segfault at 247ec40 ip 000000000247ec40 sp 00007fff0c6e04d8 error 15
[4796427.436886] php[1711]: segfault at ffffffffffffffff ip 00000000007576b6 sp 00007fff0c6e0460 error 5 in php[400000+94b000]
[4796554.025960] php[6662]: segfault at 6b6f01000040 ip 000000000075958c sp 00007fff0c6e0500 error 4 in php[400000+94b000]
[4797141.552356] php[6658]: segfault at 18 ip 0000000000758daf sp 00007fff0c6e04d0 error 4 in php[400000+94b000]
[4797495.302089] php[7239]: segfault at 110 ip 00000000007576d2 sp 00007fff0c6e0460 error 4 in php[400000+94b000]
[4797867.446166] php[8265]: segfault at 247e730 ip 000000000247e730 sp 00007fff0c6e04d8 error 15
[4798245.596106] php[8223]: segfault at 247ef40 ip 000000000247ef40 sp 00007fff0c6e04d8 error 15
[4798514.326132] traps: php[8152] general protection ip:75919d sp:7fff0c6e0578 error:0 in php[400000+94b000]
[4798769.904337] traps: php[7255] general protection ip:7576d2 sp:7fff0c6e0460 error:0 in php[400000+94b000]
[4799427.934198] php[2297]: segfault at 17b57d0 ip 00000000017b57d0 sp 00007fff4d4ba838 error 15
[4800091.548467] php[9826]: segfault at 247ed10 ip 000000000247ed10 sp 00007fff0c6e04d8 error 15
[4800607.342570] php[11239]: segfault at 100000007 ip 000000000075919d sp 00007fff0c6e0578 error 4 in php[400000+94b000]
[4800806.439680] php[9796]: segfault at 247ec90 ip 000000000247ec90 sp 00007fff0c6e04d8 error 15
[4801110.909591] php[8317]: segfault at 247ed20 ip 000000000247ed20 sp 00007fff0c6e04d8 error 15
[4801417.477197] php[9326]: segfault at 0 ip 00000000007576d2 sp 00007fff0c6e0460 error 4 in php[400000+94b000]

运气不错,现在居然就有眉目了。上面的信息一般是内存访问越界导致的。现在找一条看看 (更多…)

你可能还喜欢下面这些文章

GDB入门:使用bt查看程序出core的调用栈

当程序崩溃的时候,会产生一个core文件。我们可以称它为进程死亡现场。排查进程死亡就和破案一样,找到案发现场,仔细排查每个细节,抽丝剥茧,最终定位原因。很幸运我们有一个强大的工具调查现场信息。这个工具就是GDB。下面我们就来看看如何用GDB排查问题。首先以一个越界访问数组的程序为例,如下:#include #include void core() { std::vector<int> a; std::cout << a[0];}int main() { core(); return 0;}执行上面的代码将会产生一个core文件。假设我们的core

介绍一款工具,memcacheadmin,使用php制作的memcached管理监控工具

MemAdmin是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。主要功能: 服务器参数监控:STATS、SETTINGS、ITEMS、SLABS、SIZES实时刷新 服务器性能监控:GET、DELETE、INCR、DECR、CAS等常用操作命中率实时监控 支持数据遍历,方便对存储内容进行监视 支持条件查询,筛选出满足条件的KEY或VALUE 数组、JSON等序列化字符反序列显示 兼容memcache协议的其他服务,如Tokyo Tyrant (遍历功能除外) 支持服务器连接池,多服务器管理切换方便简洁guthub地址:https://github.com/ju

一个将网页里面的(图片,链接地址)相对路径转化为绝对路径的php实现方法

抓取网页的时候有时候会需要下载里面的图片或者其他附件,但有的网页里面用的是相对路径,这时候就要转化为绝对路径。 /*** url补全,相对url转化为绝对url* 作用是补全url*/function url2abs($srcurl,$baseurl){  $srcinfo = parse_url($srcurl);   //print_r($srcinfo);   if(isset($srcinfo[‘scheme’])) {      return $srcurl;    }  $baseinfo = parse_url($baseurl);    $url = $baseinfo[‘sc

php-fpm与fastcgi之间的关系

php-fpm与fastcgi名词解释php-fpm 全称为php fastcgi progress manager (php fastcgi 进程管理器)FastCGI全称为fast common gateway interface (Fast 通用网关接口)FastCGI是一种协议Fastcgi是CGI的升级版,一种语言无关的协议,用来沟通程序(如PHP, Python, Java)和Web服务器(Apache2, Nginx), 理论上任何语言编写的程序都可以通过Fastcgi来提供Web服务。Fastcgi的特点是会在一个进程中依次完成多个请求,以达到提高效率的目的,大多数Fastcg

docker 制作自己的 php-fpm镜像

php-fpm的镜像官方已经有了,但是直接拿过来用或许不行,不同的项目所需要的扩展不一定一样。所以这里我们以官方的php-fpm 5.6版本为基础镜像,在这个镜像上制作我们自己的镜像。开发环境安装尽可能多的扩展,线上环境则安装所需要的扩展。为了构建我们的镜像,首先需要一个名为Dockerfile的文件,docker会根据这个Dockerfile来构建镜像。首先使用FROM指令,表示当前构建的镜像的基础镜像FROM php:5.6-fpmdocker会从他自己的镜像库中拉取php-fpm5.6的镜像。然后我们使用RUN指令来在这个镜像中执行一些指令。实际上RUN后面接着的就是linux的命令。比