如何解决“FastCGI:从服务器收到的不完整标头(0 字节)”错误

Jer*_*emy 8 php mysql apache prestashop

我不断收到以下错误:

Wed Mar 30 01:22:43.780576 2016] [fastcgi:error] [pid 12345:tid 1234567890] [client 123.459.78.123:12345] FastCGI: incomplete headers (0 bytes) received from server "/path/to/php5-fcgi", referer: http://example.com/some/file.php
Run Code Online (Sandbox Code Playgroud)

这仅在我访问特定页面(控制器)时发生。更让我困惑的是,这个错误似乎是随机的。这意味着有时我可以很好地访问该页面,而其他时候我不断收到该错误。

我所说的页面是 Prestashop 1.5.4 的后台,特别是订单页面(后台 > 订单 > 订单)。

该页面确实向 MySQL 发送了一个查询(它花了不到一秒的时间)。这是完整的查询(已调试):

SELECT SQL_CALC_FOUND_ROWS
a.`id_order`,`reference`,`total_paid_tax_incl`,`payment`,a.date_add as date_add, 
a.id_currency,
a.id_order AS id_pdf,
CONCAT(LEFT(c.`firstname`, 1), '. ', c.`lastname`) AS `customer`,
osl.`name` AS `osname`,
os.`color`,
IF((SELECT COUNT(so.id_order) FROM `ps_orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new
FROM `ps_orders` a
LEFT JOIN `ps_customer` c ON (c.`id_customer` = a.`id_customer`)
LEFT JOIN `ps_order_state` os ON (os.`id_order_state` = a.`current_state`)
LEFT JOIN `ps_order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = 1) 
WHERE 1 
ORDER BY a.id_order DESC LIMIT 0,50;
Run Code Online (Sandbox Code Playgroud)

我最大的怀疑是查询有问题,因为当我使用 MySQL Workbench 运行该查询时,初始运行大约需要 2 秒。当我再次运行查询时(在第一个之后立即)它花了 ~0.059(可能是缓存)。

谁能帮我这个?

我正在使用 Ubuntu 14.04 PHP 5.5.9 Apache 2.4.7(使用 PHP5-FPM)

** 编辑 **

当我跑:

sudo tail -f /var/log/upstart/php5-fpm.log
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

[04-Apr-2016 10:55:54] WARNING: [pool www] child 37686 exited on signal 11 (SIGSEGV - core dumped) after 111.726966 seconds from start
[04-Apr-2016 10:55:54] NOTICE: [pool www] child 38128 started
[04-Apr-2016 10:55:54] WARNING: [pool www] child 37774 exited on signal 11 (SIGSEGV - core dumped) after 81.831809 seconds from start
[04-Apr-2016 10:55:54] NOTICE: [pool www] child 38129 started
[04-Apr-2016 10:55:54] WARNING: [pool www] child 37798 exited on signal 11 (SIGSEGV - core dumped) after 76.299913 seconds from start
[04-Apr-2016 10:55:54] NOTICE: [pool www] child 38130 started
[04-Apr-2016 10:55:54] WARNING: [pool www] child 37768 exited on signal 11 (SIGSEGV - core dumped) after 83.162501 seconds from start
[04-Apr-2016 10:55:54] NOTICE: [pool www] child 38131 started
[04-Apr-2016 10:55:57] WARNING: [pool www] child 37859 exited on signal 11 (SIGSEGV - core dumped) after 65.427848 seconds from start
[04-Apr-2016 10:55:57] NOTICE: [pool www] child 38133 started
Run Code Online (Sandbox Code Playgroud)

当我执行有问题的页面时,现在会出现新的警告/通知/错误。

** 编辑 2 ** 我想在我的 fpm 配置上打开slow_log 后我缩小了问题的范围。这就是我得到的:

script_filename = /path/to/some/script.php
[0x00007f55bb18afd8] query() /path/to/some/script/DbPDO.php:80
[0x00007f55bb18aef8] _query() /path/to/some/script/Db.php:305
[0x00007f55bb18ad88] query() /path/to/some/script/Db.php:482
[0x00007f55bb18ab68] executeS() /path/to/some/script/AdminController.php:2198
[0x00007f55bb18a9e8] getList() /path/to/some/script/AdminController.php:1531
[0x00007f55bb18a8d0] renderList() /path/to/some/script/AdminController.php:1440
[0x00007f55bb18a788] initContent() /path/to/some/script/Controller.php:167
[0x00007f55bb18a5d0] run() /path/to/some/script/Dispatcher.php:349
[0x00007f55bb18a480] dispatch() /path/to/some/script/index.php:50
Run Code Online (Sandbox Code Playgroud)

更好的猜测是因为这个功能:

[0x00007f55bb18ab68] executeS() /path/to/some/script/AdminController.php:2198
Run Code Online (Sandbox Code Playgroud)

它基本上发送我之前提到的查询。改变这意味着我必须改变 Prestashop 的核心引擎。我不想这样做,因为它可能对其他功能/模块有一些依赖性。

我想知道是否有一种方法可以稍微增加我的 php-fpm 或 Apache 的超时时间。我知道存在这样的解决方案,我只是不知道从哪里看/从哪里开始。