recv() failed (104: Connection reset by peer) while reading response header from upstream

今天同事一段代碼在本地開發環境運行正常,發到測試服務器卻老是報 502 。php

這段代碼是在一個循環中調用了一個第三方apinginx

因而我首先想到超時,可是觀察後發現也就幾秒鐘就報錯了,而後 ini_get("max_execution_time") 結果是30 沒問題。api

因而又想到內存問題,可是 API 請求回來的數據很少 內存超限的可能性不大。服務器

而後就只能去服務器看 nginx 日誌了,因而找到下面的錯誤信息:php-fpm

[error] 19063#0: *2450550 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 222.41.170.174, server: xxx.com, request: "GET /index/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xxx.com"測試

意思大概是 "fastcgi://127.0.0.1:9000" 斷開了與 nginx 的鏈接。spa

這樣就很明顯了 應該是 fpm 的問題,並且應該是超時之類的問題,並且極可能是配置的問題,由於 php 代碼自己應該是沒有問題的。設計

打開 php-fpm.conf 發現了:request_terminate_timeout = 5日誌

估計就是這兒了 ,改爲 30 ,果真 問題解決!server

-----------------------------------------------------------

request_terminate_timeout

表示每一個到fastcgi的請求的超時時間,它的設計目的是爲 在 php.ini  中的max_execution_time設置在某些特殊緣由下不能終止 PHP 執行的狀況。

因而,request_terminate_timeout 也就默默的成爲限制 PHP 執行時間的另外一個手段。

而request_terminate_timeout 和 max_execution_time 在通常狀況下的關係是:

哪一個值小,哪一個起做用。。。

相關文章
相關標籤/搜索