深入分析Nginx 502 504錯誤

2021-06-26 13:09:02 字數 1228 閱讀 8076

nginx 502 bad gateway的含義是請求的php-cgi已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致php-cgi程序終止。

nginx 504 gateway time-out的含義是所請求的閘道器沒有請求到,簡單來說就是沒有請求到可以執行的php-cgi。

這裡規定了php-cgi的連線、傳送和讀取的時間,300秒足夠用了,因此我的伺服器很少出現504 gateway time-out這個錯誤。最關鍵的是php-fpm.conf的設定,這個會直接導致502 bad gateway和504 gateway time-out。

下面我們來仔細分析一下php-fpm.conf幾個重要的引數:

php-fpm.conf有兩個至關重要的引數,乙個是」max_children」,另乙個是」request_terminate_timeout」

我的兩個設定的值乙個是」40″,乙個是」900″,但是這個值不是通用的,而是需要自己計算的。

計算的方式如下:

如果你的伺服器效能足夠好,且寬頻資源足夠充足,php指令碼沒有系迴圈或bug的話你可以直接將」request_terminate_timeout」設定成0s。0s的含義是讓php-cgi一直執行下去而沒有時間限制。而如果你做不到這一點,也就是說你的php-cgi可能出現某個bug,或者你的寬頻不夠充足或者其他的原因導致你的php-cgi能夠假死那麼就建議你給」request_terminate_timeout」賦乙個值,這個值可以根據你伺服器的效能進行設定。一般來說效能越好你可以設定越高,20分鐘-30分鐘都可以。由於我的伺服器php指令碼需要長時間執行,有的可能會超過10分鐘因此我設定了900秒,這樣不會導致php-cgi死掉而出現502 bad gateway這個錯誤。

而」max_children」這個值又是怎麼計算出來的呢?這個值原則上是越大越好,php-cgi的程序多了就會處理的很快,排隊的請求就會很少。設定」max_children」也需要根據伺服器的效能進行設定,一般來說一台伺服器正常情況下每乙個php-cgi所耗費的內存在20m左右,因此我的」max_children」我設定成40個,20m*40=800m也就是說在峰值的時候所有php-cgi所耗內存在800m以內,低於我的有效記憶體1gb。而如果我的」max_children」設定的較小,比如5-10個,那麼php-cgi就會「很累」,處理速度也很慢,等待的時間也較長。如果長時間沒有得到處理的請求就會出現504 gateway time-out這個錯誤,而正在處理的很累的那幾個php-cgi如果遇到了問題就會出現502 bad gateway這個錯誤。

IsPostBack深入分析

1 ispostback 介紹 ispostback是 page類有乙個 bool型別的屬性,用來判斷針對當前 form的請求是第一次還是非第一次請求。當 ispostback true時表示非第一次請求,我們稱為 postback,當 ispostback false時表示第一次請求。在 asp....

深入分析ConcurrentHashMap

再多執行緒的情況下,如果使用hashmap,就會導致死迴圈,導致cpu利用率接近100 所以如果是併發的情況不要使用hashmap 導致死迴圈主要是這段 當在多執行緒的情況由於沒有同步導致,著段 在擴容的時候會執行 do while e null 執行緒安全的hashtable 容器 hashtab...

深入分析malloc

本文大量參考了如何實現乙個malloc這篇文章。任何乙個用過或學過c的人對malloc都不會陌生。大家都知道malloc可以分配一段連續的記憶體空間,並且在不再使用時可以通過free釋放掉。但是,許多程式設計師對malloc背後的事情並不熟悉,許多人甚至把malloc當做作業系統所提供的系統呼叫或c...