2014-02-25 83 views
2

我們目前在Amazon EC2上的nginx後面運行PHP-FPM。每次高負載時,該站點都會停止響應並向客戶端輸出502錯誤的網關。502在高負載下使用PHP-FPM的錯誤網關nginx

這是從PHP-FPM error.log中

[25月2014 10:29:50]警告日誌:池WWW]服務器達到pm.max_children設置(14),考慮提高它

[25月2014年12點23分11秒]警告:[池WWW]兒童2029退出,代碼爲38736.088351秒之後,從開始

[25月2014年12點23分11秒]注意:[pool www] child 4142開始

這是從nginx的error.log中日誌

2014年2月25日十四時14分30秒[錯誤] 2013#0:* 51168的recv()失敗(104:由對等連接重置),而讀從上游,客戶端響應標頭:192.168.160.215,服務器:domain.com,請求: 「GET/HTTP/1.1」,上游 「的fastcgi://127.0.0.1:9000」,主機: 「www.domain.com」

2014/02/25 14:24:15 [error] 2013#0:* 51310從上游讀取響應標題時,recv()失敗(104:由對等方重置連接),client:192.168.160.215 server: domain.com,請求: 「GET/HTTP/1.1」,上游 「的fastcgi://127.0.0.1:9000」,主機: 「www.domain.com」

2014/02/25 14:40:21 [error] 2013#0:* 51312從上游讀取響應頭時,recv()失敗(104:由對等方重置連接),客戶端:192.168.160.215,server:domain。 com請求:「GET/HTTP/1.1」,上游:「fastcgi://127.0.0.1:9000」,主機:「www.domain.com」

我們已經實現了基於TCP/IP配置這個交流。 Error 502 in nginx + php5-fpm

,並執行此項修復我們的php-fpm的配置以及 502 Gateway Errors under High Load (nginx/php-fpm)

這是我們在PHP-fpm.d/www.conf

listen = 127.0.0.1:9000 
pm = dynamic 
pm.max_children = 14 
pm.start_servers = 7 
pm.min_spare_servers = 7 
pm.max_spare_servers = 14 

和使用的配置config on nginx/conf.d/www.conf看起來像這樣

fastcgi_buffers 256 16k 
fastcgi_buffer_size 32k 
fastcgi_connect_timeout 300 
fastcgi_send_timeout 300 
fastcgi_read_timeout 300 
+0

嘗試增加pm.max_children = 14(即64),並減少超時。 – ziollek

+0

@ziollek是否有任何特定的理論,我們應該爲我們的最大孩子設置什麼樣的數字? – maeto

+0

此鏈接可能會對您調整配置方面有用 http://www.if-not-true-then-false.com/2011/nginx-and-php-fpm-configuration-and-optimizing-tips -and-tricks/ –

回答

0

使用PHP FPM,需要php的請求ocess從nginx切換到php-fpm進程,並返回結果。

如果您一次請求太多(如果您的任何請求花費的時間太長,或者您的資源與您的負載匹配不佳),您將開始接收超時或被拒絕的請求PHP-FPM。你看到的是502錯誤。

[25-Feb-2014 10:29:50] WARNING: [pool www] server reached pm.max_children setting (14), consider raising it

您可以增加這一點,但是這可能不是本身就是一種解決方案。達到最大孩子的原因很可能是由於您的實例處理單個請求所花費的時間。如果你的CPU在這種情況發生時最大化,它可能不會起作用。

您可能需要考慮增加您的實例大小作爲短期解決方案。或者進行代碼更改以更好地利用緩存。

+0

當我們的服務器開始響應CPU時,沒有最大化,內存中仍有很多頭部空間。 – maeto

+0

@ user3351805然後嘗試增加max_children設置,看看是否有幫助。如果你的PHP請求正在等待,對於外部服務,你可能需要並行處理更多。 – datasage

+0

是否有任何特定的理論,我們應該爲我們的最大孩子設置什麼樣的數字? – maeto