1. 程式人生 > >Nginx、php-fpm 重啟和過載配置(平滑重啟)

Nginx、php-fpm 重啟和過載配置(平滑重啟)

Nginx

Nginx程序分為master主程序和worker工作程序。master程序通過訊號通知worker程序執行工作。

  • 命令
    • sudo nginx -s reload 過載配置(平滑重啟)
    • sudo service nginx restart 重啟

我們先看看沒有請求的情況下,操作以上命令在伺服器上展示的結果。
nginx 過載配置
nginx 重啟
很明顯的可以看到,當 nginx reload 的時候 master 程序ID是沒有變化的,worker 程序ID是有變化的。而nginx restart 的時候 masterworker的程序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 時,不會存在新舊共存的情況(masterworker 都是)。如果有請求未完成時。舊的master

worker 會有一段時間處理請求(超時時間)。然後被殺掉,建立新的masterworker 程序。所以 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)

參考連線