Nginx、php-fpm 重啟和過載配置(平滑重啟)
阿新 • • 發佈:2019-01-04
Nginx
Nginx
程序分為master
主程序和worker
工作程序。master
程序通過訊號通知worker
程序執行工作。
- 命令
- sudo nginx -s reload 過載配置(平滑重啟)
- sudo service nginx restart 重啟
我們先看看沒有請求的情況下,操作以上命令在伺服器上展示的結果。
很明顯的可以看到,當 nginx reload 的時候 master
程序ID是沒有變化的,worker
程序ID是有變化的。而nginx restart 的時候 master
,worker
的程序ID都有變化。處理過程接下來再討論,我們再來看看正在處理請求的情況下,nginx 程序變化情況。
用 watch
命令進行實時監控
watch -n1 'ps -ef | grep nginx | grep -v grep'
用 sleep
創造延時效果
<?php
sleep(10);
echo 'Hello';
sudo nginx -s reload
sudo service nginx restart
可以看到這種情況下。reload 時,舊的worker
程序和新的worker
程序是共存的,舊的worker
程序在處理完請求後會被殺掉。而 restart 時,不會存在新舊共存的情況(master
,worker
都是)。如果有請求未完成時。舊的master
worker
會有一段時間處理請求(超時時間)。然後被殺掉,建立新的master
,worker
程序。所以 restart 的時候nginx 會有卡頓的現象。
PHP-FPM
php-fpm
程序也分為master
主程序和worker
工作程序。
- 命令
- sudo service php-fpm reload 過載配置(平滑重啟)
- sudo service php-fpm restart 重啟
沒有請求時,截圖通 nignx 的截圖類似,就不上圖了。
在有請求未完成的時。當 restart,請求會直接斷掉。reload 平滑重啟的條件是在php-fpm.conf
process_control_timeout
(預設為0)