最近測試環境老是被 php-fpm打滿,但是又不知道怎麼排查,分析不出是哪些請求佔用導致 php-fpm 沒有釋放,於是學習了一下 php-fpm 的配置;
通過 /status可以檢視子程式處理請求的資訊,但是這個一般不會開放,只能在自己的機器搞搞;測試時配置了慢日誌,sleep 了10 秒,發現沒往 log.slow檔案裡寫日誌,還不確定是什麼原因。
- 檢視 php 配置檔案 ini 的路徑
php -i | grep .ini
- 檢視 php-fpm 配置檔案路徑
ps -ef | grep php-fpm
- php-fpm 重啟
關閉
平滑重啟kill -INT `cat /usr/local/var/run/php-fpm.pid`
暴力重啟kill -USR2 `cat /usr/local/var/run/php-fpm.pid`
先關閉,再啟動killall php-fpm && /usr/local/sbin/php-fpm &
- 修改子程式管理模式,pm 配置
修改配置pm = static
pm.max_children = 3
表示固定子程式數為 3 個
修改配置pm = ondemand
pm.max_children = 2
表示子程式按需生成,最多2個,pm.process_idle_timeout
表示空閒程式空閒多少秒後超時退出
修改配置pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
表示子程式是動態生成,服務啟動時建立 2 個子程式,最大空閒程式 3 個,最小空閒程式 1 個,最多子程式 5 個
- 配置訪問程式狀態
修改配置pm.status_path = /status
修改 nginx 配置
重啟相關服務後,訪問 xxx.com:8888/status?json&fulllocation /status { fastcgi_pass php:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; fastcgi_param HTTP_X_FORWARDED_FOR host.docker.internal; }
可以看到相關指標
本作品採用《CC 協議》,轉載必須註明作者和本文連結