錯誤502 502badgateway解決辦法

環境:Ubuntu 16.04.2
nginx version: nginx/1.10.3 (Ubuntu)
【錯誤502 502badgateway解決辦法】

錯誤502 502badgateway解決辦法

文章插圖
php-fpm version: php-fpm/5.6
php-fpm錯誤日志WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
Nginx錯誤日志eader from upstream, client: xxx.xxx.xxxx.xxx, server: xxx.domain.com, request: "GET /index.php/1/2/test.html HTTP/1.0", upstream: "fastcgi://unix:/run/php/php5.6-fpm.sock:", host: "xxx.domain.com", referrer: "http://xxx.domain.com./index.php/1/2/test.html?filter_limit=100"
從Nginx日志里面很容易看出來,是php-fpm出了問題 , 重啟php-fpm后網站恢復正常 。php-fpm日志里面給出了詳細的錯誤提示,子進程數已經達到設置的最大值 。
解決方案/etc/php/5.6/fpm/php-fpm.conf
...
...
pm:表示使用那種方式,有兩個值可以選擇,就是static(靜態)或者dynamic(動態) 。
在更老一些的版本中,dynamic被稱作apache-like 。這個要注意看配置文件的說明 。
下面4個參數的意思分別為:
pm.max_children:靜態方式下開啟的php-fpm進程數量
pm.start_servers:動態方式下的起始php-fpm進程數量
pm.min_spare_servers:動態方式下的最小php-fpm進程數
pm.max_spare_servers:動態方式下的最大php-fpm進程數量
區別如果dm設置為 static,那么其實只有pm.max_children這個參數生效 。系統會開啟設置數量的php-fpm進程 。
如果dm設置為 dynamic,那么pm.max_children參數失效,后面3個參數生效 。
系統會在php-fpm運行開始 的時候啟動pm.start_servers個php-fpm進程,然后根據系統的需求動態在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm進程數
關于數量的計算方法可以通過memory_get_peak_usage(true)這個函數獲得內存峰值,以此作為單個請求的程序內存消耗消耗量,并考慮進php-fpm本身的基礎內存消耗 , 可以得到一個近似的單進程內存消耗量 。