PHP-FPM SEGV烂主事件循环排查

18 views
Skip to first unread message

AR

unread,
Dec 16, 2014, 5:00:52 AM12/16/14
to sh...@googlegroups.com
Hi, all

这事比较蛋疼,PHP-FPM在两台RHEL5(内核是2.6.18-194.el5,glibc是2.5-49)上跑。
PHP是自己编的,FPM配置使用epoll。

奇怪的是近阵子其中一台经常SEGV:


Nov 26 17:03:53 app10-102 kernel: php-fpm[831]: segfault at 0000001b00000000 rip 0000001b00000000 rsp 00007fffe9342f98 error 14


于是把core dump给搞出来了,一看栈信息


Program terminated with signal 11, Segmentation fault.
#0 0x0000001b00000000 in ?? ()
(gdb) bt
#0 0x0000001b00000000 in ?? ()
#1 0x0000000000742f1a in fpm_event_epoll_wait (queue=<value optimized out>, timeout=831) at /srv/php-5.3.29/sapi/fpm/fpm/events/epoll.c:143
#2 0x0000000000738082 in fpm_event_loop (err=0) at /srv/php-5.3.29/sapi/fpm/fpm/fpm_events.c:403
#3 0x0000000000738082 in fpm_run (max_requests=0x7fffe934554c) at /srv/php-5.3.29/sapi/fpm/fpm/fpm.c:113
#4 0x000000000073a377 in main (argc=6,argv=0x7fffe9345668) at /srv/php-5.2.29/sapi/fpm/fpm/fpm_main.c:1842


frame 0 看不到内容,不过看上去貌似是FPM里某个操作烂了。
搜了一下,看到PHP上有个类似的issue[1],他定位到了源代码:

// /srv/php-5.3.29/sapi/fpm/fpm/fpm_events.c:459
void fpm_event_fire(struct fpm_event_s *ev) /* {{{ */
{
if (!ev || !ev->callback) {
return;
}

(*ev->callback)( (struct fpm_event_s *) ev, ev->which, ev->arg);
}


嗯,那个issue最后也不了了之了,5.3官方又没人修,某很好奇到底烂在哪里了。

另外搜到个对栈信息不全的说法是使用了不正确的函数指针[2],看上去这里又不像。

请问各路高手,这问题继续查下去应该是个什么思路?

另外应该怎么把frame 0那个栈信息搞出来?FPM配置换成poll就没问题,不过原来的
core dump文件搞丢了,现在又换了epoll跑等烂。。。。


详细背景请参考某写了篇网志[3],这坑想填完啊。


[1]: https://bugs.php.net/bug.php?id=62418
[2]: http://stackoverflow.com/questions/9809810/gdb-corrupted-stack-frame-how-to-debug
[3]: http://weblog.momoka.net/2014/12/php-segv-and-event-mechansim.html
signature.asc
Reply all
Reply to author
Forward
0 new messages