apache 2.4 和 PHP 5.6.14-0+deb8u1 使用 fpm 时出错

apache 2.4 和 PHP 5.6.14-0+deb8u1 使用 fpm 时出错

我有一台 Vagrant 机器:

  • Apache/2.4.10(Debian)
  • PHP 5.6.14-0+deb8u1 和 PHP-FPM。

在某些情况下我会收到此错误:500 内部服务器错误。

我在 php5-fpm.log 中的消息中看到了这个

[09-Dec-2015 20:01:24] WARNING: [pool www] child 608 exited on signal 11 (SIGSEGV) after 368.307577 seconds from start

在 error.log 文件中我有以下消息:

[Wed Dec 09 20:01:24.944748 2015] [fastcgi:error] [pid 535:tid 140236008924928] (104)Connection reset by peer: [client 192.168.33.1:57201] FastCGI: comm with server "/usr/lib/cgi-bin/php5-fcgi" aborted: read failed
[Wed Dec 09 20:01:24.945014 2015] [fastcgi:error] [pid 535:tid 140236008924928] [client 192.168.33.1:57201] FastCGI: incomplete headers (0 bytes) received from server "/usr/lib/cgi-bin/php5-fcgi"

我已检查我的 php.ini 以更新如下选项:

max_execution_time = 360
max_input_time = 180
memory_limit = 512M

这是我的 opcache 文件配置:

zend_extension=opcache.so
opcache.enable=0 ; for now disabled
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=2000  ; Using "find /home -type f -print | grep php | wc -l" produced 226540 php files.
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=0
opcache.revalidate_freq=60
opcache.fast_shutdown=1

这是我的 php5-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

我已经阅读了有关该错误的信息,但我没有找到解决它的明确方法,或者不知道应用程序发生了什么以致于返回此错误。

谢谢。

奥斯卡

答案1

看来你的脚本超过了 max_execution_time。也许 360

了解哪个函数消耗了最多的执行时间可能非常有用。您可以使用 php-fpm 的慢速日志。

在您的池文件(/etc/php5/fpm/pool.d/www.conf)中查找:

  • 'slowlog',并添加一个日志文件,如:“/var/log/php-fpm/www.log.slow”
  • 'request_slowlog_timeout',并添加一个时间,如:'10s'

重新启动 php-fpm,tailf 此文件,也许您就可以追踪您的巨大函数。

答案2

从日志条目来看,对我来说这似乎是一个超时问题。

假设您能够提供一些 PHP 页面,并且您报告的错误仅与一个页面有关,我会尝试删除页面上的代码,直到找到可能导致超时的块并从那里开始工作。也许您有一个需要优化的数据库查询,或者您正在引用没有响应的外部 Web 服务。

相关内容