ginx應對高並發訪問,聽說是很有一套的,為了應對1萬次的並發,不算高哈,弄了個lnmp來測試,安裝完成後,就開1000線來並發訪問,一下就出現了502 bad gateway,看來一些設定檔要進行相應的修改呀,在網上找了點相關的資料,分享一下。
首先,這裡講的伺服器環境(lnmp)是指 linux + nginx + php(php-cgi + php-fpm)+ mysql。
502 Bad Gateway是lnmp下出現得最頻繁的問題,其原因也有很多,以下是我收集的問題原因及其解決方案。
1. php進程死亡
此原因的問題表現為:每次動態(php)請求都出現502錯誤
解決方案:啟動php即可 “service php-fpm start “,或者 “php安裝路徑/php/sbin/php-fpm start”
2. php-cgi進程數不足
此原因的問題表現為:動態請求有時出現502錯誤,一般沒問題,這是並發高時php-cgi進程數不夠用的表現
解決方案:修改php-fpm配置php-fpm.conf,將60 中的數加大,max_children數的設定不僅取決於伺服器硬體設定,而且和php程式的複雜度有關,一般4G記憶體可以設定到120-200。修改後把php-fpm reload下;必要時是再修改nginx配置nginx.conf,將 worker_processes 數調到與cpu數相等(worker_processes預設為1)
3. php-cgi進程逾時
此原因的問題表現為:php進程運行一段時間後出現502錯誤,這種情況可能是php程式沒有加set_time_limit(0),也可能是被php-fpm的設定限定了已耗用時間,下面討論第二中情況
解決方案:修改php-fpm配置php-fpm.conf,將30s 中數字調到更高,調為0s則允許無限時間運行;必要時再修改nginx配置nginx.conf,將fastcgi_connect_timeout、 fastcgi_send_timeout、fastcgi_read_timeout參數加大
4. 磁碟空間不足
此原因較少,問題表現為:502錯誤或者無法串連到伺服器,無法串連到伺服器時nginx也死了
這種情況的判斷:啟動php-fpm或者nginx的時間較長,但最終啟動失敗,這大概就是磁碟空間不足了,然後可以用命令查看磁碟佔用狀況:df -lh ,如果根目錄”/”對應的磁碟使用率為100%,那麼需要清理磁碟空間
解決方案:刪除過大的記錄檔,關閉部分服務元件的日誌。一般需要檢查 /var/log 目錄下的記錄檔,檢查 nginx、php的日誌,檢查mysql的日誌。如果以上目錄沒有問題,則需一個一個的檢查其他目錄(優先檢查 /usr目錄),刪除過大的檔案。
註:同樣適用於Tengine.