PHP-FPM - 读取响应头时上游过早关闭连接

时间:2013-05-04 20:21:11

标签: nginx apc php

已经看到同样的问题 - upstream prematurely closed connection while reading response header from upstream, client 但正如Jhilke Dai说的那样根本没有解决,我同意。 在nginx + phpFPM安装上得到了同样的确切错误。当前软件版本:FreeBSd9.1上的nginx 1.2.8 php 5.4.13(cli)。实际上有点孤立这个错误,并确保它在尝试通过phpMyadmin导入大于3 mbs到mysql的大文件时发生。当达到30秒限制时,还计算后端关闭连接。 Nginx错误日志抛出此

 [error] 49927#0: *196 upstream prematurely closed connection while reading response header from upstream, client: 7X.XX.X.6X, server: domain.com, request: "POST /php3/import.php HTTP/1.1", upstream: "fastcgi://unix:/tmp/php5-fpm.sock2:", host: "domain.com", referrer: "http://domain.com/phpmyadmin/db_import.php?db=testdb&server=1&token=9ee45779dd53c45b7300545dd3113fed"

我的php.ini限制相应提升

upload_max_filesize = 200M
default_socket_timeout = 60
max_execution_time = 600
max_input_time = 600

my.cnf相关限制

max_allowed_packet = 512M

Fastcgi限制

location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass unix:/tmp/php5-fpm.sock2;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_intercept_errors on;
fastcgi_ignore_client_abort on;
fastcgi_connect_timeout 60s;
fastcgi_send_timeout 200s;
fastcgi_read_timeout 200s;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

尝试更改fastcgi超时以及缓冲区大小,这没有帮助。 php错误日志没有显示问题,启用所有通知,警告 - 没什么用。 还尝试禁用APC - 没有效果。

2 个答案:

答案 0 :(得分:4)

我有同样的问题,在我的开发机器(OSX + nginx + php-fpm)中频繁和随机地获得了502 Bad Gateway,并通过更改/usr/local/etc/php/5.6/php中的一些参数来解决它-fpm.conf:

我有这个设置:

 pm = dynamic
 pm.max_children = 10
 pm.start_servers = 3
 pm.max_spare_servers = 5

...并将其更改为:

pm = dynamic
pm.max_children = 10
pm.start_servers = 10
pm.max_spare_servers = 10

...然后重新启动php-fpm服务。

此设置基于我在此处找到的内容:[https://bugs.php.net/bug.php?id=63395]

答案 1 :(得分:0)

您的脚本需要多长时间才能计算出来?尝试设置PHP和Nginx HUGE超时,并在请求期间监视您的系统。然后调整您的值以优化性能。

此外,降低PHP-FPM中的日志级别,可能会有某种类型的警告,信息或调试跟踪可以为您提供一些信息。

最后,请注意PHP-FPM中可用的子项和进程数。也许Nginx正在挨饿,等待PHP-FPM孩子可以使用。

相关问题