今天發了個鏈接,可能同時在線的人瞬間比較多,結果網站報503錯誤,回去打開php-fpm錯誤日志一看,php-fpm服務掛掉了,報如下錯誤:
[04-Apr-2016 15:38:04] NOTICE: systemdmonitorintervalsetto 10000ms [05-Apr-2016 19:03:08] WARNING: [poolwww] seemsbusy (youmayneedto increasepm.start_servers, or pm.min/max_spare_servers), spawning 8 children, thereare 0 idle, and 29 totalchildren [05-Apr-2016 19:03:09] WARNING: [poolwww] seemsbusy (youmayneedto increasepm.start_servers, or pm.min/max_spare_servers), spawning 16 children, thereare 0 idle, and 34 totalchildren [05-Apr-2016 19:03:11] WARNING: [poolwww] seemsbusy (youmayneedto increasepm.start_servers, or pm.min/max_spare_servers), spawning 32 children, thereare 0 idle, and 39 totalchildren [05-Apr-2016 19:03:12] WARNING: [poolwww] seemsbusy (youmayneedto increasepm.start_servers, or pm.min/max_spare_servers), spawning 32 children, thereare 0 idle, and 44 totalchildren [05-Apr-2016 19:03:13] WARNING: [poolwww] seemsbusy (youmayneedto increasepm.start_servers, or pm.min/max_spare_servers), spawning 32 children, thereare 0 idle, and 49 totalchildren [05-Apr-2016 19:03:14] WARNING: [poolwww] serverreachedpm.max_children setting (50), considerraisingit
錯誤提示建議增加pm.start_servers數量,打開我的php-fpm配置:
pm.max_children = 50
; Thenumberofchild processescreatedonstartup.
; Note: Usedonlywhenpmis setto 'dynamic' ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 pm.start_servers = 15 ; Thedesiredminimumnumberofidleserverprocesses. ; Note: Usedonlywhenpmis setto 'dynamic' ; Note: Mandatorywhenpmis setto 'dynamic' pm.min_spare_servers = 5 ; Thedesiredmaximumnumberofidleserverprocesses. ; Note: Usedonlywhenpmis setto 'dynamic' ; Note: Mandatorywhenpmis setto 'dynamic' pm.max_spare_servers = 35
這里pm.start_servers之前我設置為5,注意配置文件也說明start_servers的值默認是max_spare_servers-min_spare_servers的一半。(ps:具體的值要根據服務器配置情況和壓力測試得出)
網站服務器是阿里雲1G帶寬,1G內存,1核CPU配置,關鍵還在一台機子上裝了數據庫,redis各種服務。
幾個php-fpm重要參數說明
pm.max_children = 24
static模式下創建的子進程數或dynamic模式下同一時刻允許最大的php-fpm子進程數量
pm.start_servers = 16
動態方式下的起始php-fpm進程數量
pm.min_spare_servers = 12
動態方式下服務器空閑時最小php-fpm進程數量
pm.max_spare_servers = 24
動態方式下服務器空閑時最大php-fpm進程數量
經驗人士的總結:
一般php-fpm進程占用20~30m左右的內存就按30m算。如果單獨跑php-fpm,動態方式起始值可設置物理內存Mem/30M,由於大家一般Nginx、MySQL都在一台機器上,於是預留一半給它們,即php-fpm進程數為$Mem/2/30。
調整之后的幾個值是:
pm = dynamic pm.max_children = 50 pm.start_servers = 15 pm.min_spare_servers = 10 pm.max_spare_servers = 40
重啟php-fpm服務:service php70-php-fpm reload,繼續使用top命令查看內存使用情況,發現十幾個php-fpm啟動。