php-fpmsubprocess在信号11上退出

我们的应用程序在AWS上的Docker容器上运行。 操作系统:Ubuntu 14.04.2 LTS Nginx版本:nginx / 1.4.6(Ubuntu)Memcached版本:memcached 1.4.14 PHP版本:PHP 5.5.9-1ubuntu4.11(cli)(内置:2015年7月2日15:23: 08)系统内存:7.5 GB

我们得到空白页面和404错误不太频繁。 在检查日志的时候,发现php-child进程被终止,看来内存主要被memcache和php-fpm进程使用,而且空闲内存非常低。

memcache被configuration为使用2GB内存。

这里是PHP的www.conf

pm = dynamic pm.max_children = 30 pm.start_servers = 9 pm.min_spare_servers = 4 pm.max_spare_servers = 14 rlimit_files = 131072 rlimit_core = unlimited 

错误日志

 /var/log/nginx/php5-fpm.log [29-Jul-2015 14:37:09] WARNING: [pool www] child 259 exited on signal 11 (SIGSEGV - core dumped) after 1339.412219 seconds from start /var/log/nginx/error.log 2015/07/29 14:37:09 [error] 141#0: *2810 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: xxxx, server: _, request: "GET /suggestions/business?q=Selectfrom HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "example.com", referrer: "http://example.com/" /var/log/nginx/php5-fpm.log [29-Jul-2015 14:37:09] NOTICE: [pool www] child 375 started /var/log/nginx/php5-fpm.log:[29-Jul-2015 14:37:56] WARNING: [pool www] child 290 exited on signal 11 (SIGSEGV - core dumped) after 1078.606356 seconds from start 

核心转储

 Core was generated by php-fpm: pool www.Program terminated with signal SIGSEGV, Segmentation fault.#0 0x00007f41ccaea13a in memcached_io_readline(memcached_server_st*, char*, unsigned long, unsigned long&) () from /usr/lib/x86_64-linux-gnu/libmemcached.so.10 

dmesg的

 [Wed Jul 29 14:26:15 2015] php5-fpm[12193]: segfault at 7f41c9e8e2da ip 00007f41ccaea13a sp 00007ffcc5730ce0 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] [Wed Jul 29 14:28:26 2015] php5-fpm[12211]: segfault at 7f41c966b2da ip 00007f41ccaea13a sp 00007ffcc5730ce0 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] [Wed Jul 29 14:29:16 2015] php5-fpm[12371]: segfault at 7f41c9e972da ip 00007f41ccaea13a sp 00007ffcc5730b70 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] [Wed Jul 29 14:35:36 2015] php5-fpm[12469]: segfault at 7f41c96961e9 ip 00007f41ccaea13a sp 00007ffcc5730ce0 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] [Wed Jul 29 14:35:43 2015] php5-fpm[12142]: segfault at 7f41c9e6c2bd ip 00007f41ccaea13a sp 00007ffcc5730b70 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] [Wed Jul 29 14:37:07 2015] php5-fpm[11917]: segfault at 7f41c9dd22bd ip 00007f41ccaea13a sp 00007ffcc5730ce0 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] [Wed Jul 29 14:37:54 2015] php5-fpm[12083]: segfault at 7f41c9db72bd ip 00007f41ccaea13a sp 00007ffcc5730ce0 error 4 in libmemcached.so.10.0.0[7f41ccad2000+32000] 

请让我知道如果需要更多的信息

提前致谢

在搜索这个同样的问题的同时,努力寻找一个与会话无关的解决方案(因为我已经排除了这个问题), 也没有损坏PHP代码(因为我有几个网站运行的是完全相同版本的WordPress,没有一个问题…除了一个),我遇到了一个答案,告诉可能的解决方案确实涉及到删除一些错误的扩展(通常是memcache / d,但可能是别的东西)。

由于我的这个网站在一台Ubuntu服务器上完美运行,当切换到一台较新的服务器时,我立即怀疑是从PHP 5.5迁移到了7,导致了这个问题。 这很奇怪,因为没有其他网站受到影响。 然后我想起这个新服务器上的另一件事是不同的:我也安装了New Relic 。 这是一个在后台运行的扩展和小型服务器,并将大量分析数据发送到New Relic进行处理。 据称,这是一个PHP 5的扩展,但令人惊讶的是,它也加载了PHP 7。

现在来棘手的一点。 在某个时候,我已经安装了W3 Total Cache来安装该网站的WordPress。 随后,我看到那台服务器的性能非常好,以至于W3TC是不必要的,只是简单的配置而已。 所以我可以卸载W3TC。 这一切都非常好,但是…我忘记了我已经变成了W3TC的New Relic(据说,它增加了一些额外的分析数据发送到New Relic)。 当卸载W3TC时,可能在我的服务器上的New Relic配置上留下了一些东西,它仍然试图通过W3TC接口发送数据(假设W3TC有一个接口…我真的不知道它是如何工作的级别),并且,由于该特定位代码丢失,该网站的php_fpm处理程序将失败…一些时间。 并非所有的时间,因为我假设,在大多数情况下,nginx发回静态页面。 或者,也许php_fpm,设置为“回收”后100通话左右,将崩溃一站式。 无论发生什么事情,这绝对与New Relic有关 – 只要我从PHP中删除New Relic扩展,该网站就恢复正常工作。

因为这是一个特定的情况,所以我只是把它写成一个答案,在未来某个人有机会碰到确切的问题。

如果php无法将会话信息写入文件,可能会发生这种情况默认情况下,它是/var/lib/php/session您可以使用配置session_save_path

https://serverfault.com/questions/427596/phpmyadmin-having-problems-on-nginx-and-php-fpm-on-rhel-6/429445

就我而言,这是由New Relic PHP Agent引起的。 因此,对于导致崩溃的特定功能,我添加了这个代码来禁用New Relic

 if (function_exists('newrelic_ignore_transaction')) { newrelic_ignore_transaction(); } 

请参阅: https : //discuss.newrelic.com/t/how-to-disable-a-specific-transaction-in-php-agent/42384/2

安装xdebug之后,我遇到了这个问题,在/etc/php/7.1/fpm/php.ini中添加了一些属性,并重新启动了nginx。 这是运行在一个Homestead Laravel框。

简单地重新启动php7.1-fpm服务为我解决了它。

你通常可以通过查看你的系统日志(linux上的/var/log/syslog ,mac os上的/var/log/system.log )来查找关于这些崩溃的更多细节。

我有Sep 14 11:16:26 bob ReportCrash[89504]: Saved crash report for php-fpm[13757] version 0 to /Users/bob/Library/Logs/DiagnosticReports/php-fpm_2017-09-14-111626_MacBob.crash在我的系统日志,生成的文件包含一切知道哪个扩展有麻烦。

在我的情况下,我已经停用了缓冲功能ob_start("buffer"); 在我的代码;)

在我的情况下,这与zend debug / xdebug有关 。 它将一些tcp数据包转发到IDE(phpstorm),而不是在此端口上侦听(调试已关闭)。 解决方法是禁用这些扩展或启用调试端口上的侦听。