502與504釋義:
502 bad gateway 顧名思義 網關錯誤 後端服務器tomcat或php沒有起來,應用服務的問題(前提是接入層7層正常的情況下)。
應用服務問題一種是應用本身問題;另一種是因爲依賴服務問題比如依賴服務RT高,依賴的服務有大的讀取(mysql慢查,http等),以至於調用方超過超時read時間;服務集羣壓力大時,也會出現502超時(502理解爲不可響應或響應不過來,其實還是不可響應)。
504 gateway time-out 顧名思義 網關超時 一般計算機中的超時就是配置錯了,此處一般指nginx做反向代理服務器時,所連接的服務器tomcat無響應導致的。
從網絡角度,502已經與後端建立了連接,但超時;504與後端連接未建立,超時。
5打頭的http回覆碼錶示服務端出了問題,php-cgi進程數不夠用、php執行時間長、或者是php-cgi進程死掉,都會出現502錯誤,有可能是nginx的問題,也可能是後端php的問題
排查思路:
1、必現502,應用“掛了”
2、偶現502,資源不足,mysql連不上,等等,大都是資源不足的問題
排查邏輯:
Nginx通過配置fastcgi模塊來提供對php支持
Nginx的問題:
- 可能php的執行時間比較長,超過了nginx的等待時間,把nginx默認的等待時間調長
fastcgi_connect_timeout 300;(默認60,不能超過75)
fastcgi_send_timeout 300; (默認60)
fastcgi_read_timeout 300; (默認60)
phpfpm的問題:/usr/local/php/etc/php-fpm.conf:
1. php有沒有啓動
- 2. 可以查看FastCGI進程數的配置與實際grep php-cgi出的進程數,相近的話,可以將FastCGI的進程數量調大
修改php配置文件中pm.max_children 默認10,改成30
- 3. 或者修改php配置文件中pm.max_requests的值,它表示每個CGI進程可以響應的請求數。
- 嘗試增大php緩存區的大小,因爲它默認是8k,可以改成128k
fastcgi_buffers 8 128k
補充: 如果nginx訪問量突然增大的話,也會出現504的錯誤,因爲nginx每秒迴應的請求是有限制的,如果超過的話,只會對部分請求做出回覆,這個可以過濾nginx日誌中ip的請求數來判斷是否被攻擊。