Home Operation and Maintenance Nginx What are nginx smooth restart and FPM smooth restart?

What are nginx smooth restart and FPM smooth restart?

May 23, 2023 pm 09:08 PM
nginx fpm

Smooth Restart

GR is the abbreviation of Graceful Restart. It is a mechanism to ensure that forwarding services are not interrupted when the protocol is restarted.
The core of the GR mechanism is that when a device restarts the protocol, it can notify its surrounding devices to maintain stable neighbor relationships and routes to the device within a certain period of time. After the protocol is restarted, peripheral devices assist it in synchronizing information (including various topology, routing and session information maintained by routing/MPLS-related protocols that support GR), restoring the device to the state before the restart in the shortest possible time. state. There will be no route flapping during the entire protocol restart process, and there will be no change in the packet forwarding path. The entire system can forward data without interruption. This process is called a smooth restart.

nginx smooth restart

The Nginx process can be divided into two types: the main process and the worker process. Its smooth restart is controlled through the signal HUB.

What are nginx smooth restart and FPM smooth restart?

Note: On POSIX-compliant platforms, SIGUSR1 and SIGUSR2 are signals sent to a process that represent user-defined situations.

In order to analyze the smooth restart process of nginx in detail, we continue to monitor the nginx process changes.
Send HUP signal

kill -HUP `cat /home/git/nginx/logs/nginx.pid`
Copy after login

What are nginx smooth restart and FPM smooth restart?

What are nginx smooth restart and FPM smooth restart?

What are nginx smooth restart and FPM smooth restart?

##Through observation, a rough smooth restart can be analyzed The process is:

1. The master uses the new configuration to fork out n-1 workers and a new master
2. The new worker handles the new request, and the old worker exits after execution
3. The master reloads the configuration, during Use the new master to take over the service
4. After the master is loaded and configured, the new master switches to the worker working mode
After the smooth restart, the master process number will not change.

nginx smooth upgrade

HUP is only used for smooth restart, loading configuration, etc. If you want to smoothly upgrade the nginx version and reload the compiled binary file, you need to use USR2 Signal.

1. Send USR2 signal

kill -USR2 `cat /home/git/nginx/logs/nginx.pid`
Copy after login

What are nginx smooth restart and FPM smooth restart?

What are nginx smooth restart and FPM smooth restart?##Observe the nginx process, fork out new master and worker, at this time The content of nginx.pid has changed, and the nginx.pid.oldbin file is generated in the logs directory to record the old master pid.

2. Send the WINCH signal to the old master, and nginx worker will stop the service gracefully. That is: stop receiving new requests, but will not terminate requests that are already being processed. After a period of time, all worker processes of the old nginx exit, leaving only the master process, and all user requests are processed by the new nginx process.

kill -WINCH `cat /home/git/nginx/logs/nginx.pid.oldbin`
Copy after login

What are nginx smooth restart and FPM smooth restart?3. Send the QUIT signal to the old master, the old nginx process completely exits, and the smooth upgrade is completed.

kill -QUIT `cat /home/git/nginx/logs/nginx.pid.oldbin`
Copy after login

What are nginx smooth restart and FPM smooth restart?

FPM Smooth Restart

FPM (FastCGI Process Manager) is used to replace most of the additional functions of PHP FastCGI, php5 FPM has been integrated since .3.3. PHP-FPM can be turned on by passing the –enable-fpm parameter in ./configure.

FPM’s smooth restart needs to be controlled by the USR2 signal, but it is quite different from nginx’s smooth restart process.

kill -USR2 `cat /home/git/php/var/run/php-fpm.pid`
Copy after login

What are nginx smooth restart and FPM smooth restart? By continuing to observe the fpm process, we can see that FPM restarts smoothly. It needs to wait for the child process to completely exit before starting the new master and child processes, and then the old master quit.

Use strace for further analysis


What are nginx smooth restart and FPM smooth restart?It is found that the master notifies all child processes to exit, including the child process that is processing the request.

In order to further verify this conclusion, write a server-side sleep script

<?php
exec("sleep 5");
echo &#39;done&#39;;
Copy after login

Use the browser to request this address, and during this period, fpm will be restarted smoothly, and the request will be directly 502.

nginx error log:

[error] 29841#0: *1646 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "localhost"
Copy after login

php bug#60961, there is also a description of fpm's inability to gracefully achieve a smooth restart. Is FPM so low? The answer was no at that time, in fact our goal can be achieved through the process_control_timeout parameter.


process_control_timeout

<p>Set the timeout for the child process to accept multiplexing signals from the main process. Available units: s (seconds), m (minutes), h (hours) or d (days). Default unit: s (seconds). Default: 0 (off). </p> <p>In principle, php-fpm will select an idle fastcgi process to process the request. Before processing, php-fpm will send a signal to fastcgi to prepare the fastcgi process to accept the request processing. However, the fastcgi process is not always able to handle the request, that is, it cannot always respond to the signal (such as suspended animation). At this time, you need to set the time php-fpm leaves for the fastcgi process to respond to the signal. If it times out, php -fpm will think of other ways (such as selecting other fastcgi processes), this is the role of the process_control_timeout parameter. </p> <p>The default value of this parameter is 0, which means it does not take effect. Change it to 10 and re-verify. 502 will no longer appear. </p>

The above is the detailed content of What are nginx smooth restart and FPM smooth restart?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to configure cloud server domain name in nginx How to configure cloud server domain name in nginx Apr 14, 2025 pm 12:18 PM

How to configure an Nginx domain name on a cloud server: Create an A record pointing to the public IP address of the cloud server. Add virtual host blocks in the Nginx configuration file, specifying the listening port, domain name, and website root directory. Restart Nginx to apply the changes. Access the domain name test configuration. Other notes: Install the SSL certificate to enable HTTPS, ensure that the firewall allows port 80 traffic, and wait for DNS resolution to take effect.

How to check whether nginx is started How to check whether nginx is started Apr 14, 2025 pm 01:03 PM

How to confirm whether Nginx is started: 1. Use the command line: systemctl status nginx (Linux/Unix), netstat -ano | findstr 80 (Windows); 2. Check whether port 80 is open; 3. Check the Nginx startup message in the system log; 4. Use third-party tools, such as Nagios, Zabbix, and Icinga.

How to check nginx version How to check nginx version Apr 14, 2025 am 11:57 AM

The methods that can query the Nginx version are: use the nginx -v command; view the version directive in the nginx.conf file; open the Nginx error page and view the page title.

How to create a mirror in docker How to create a mirror in docker Apr 15, 2025 am 11:27 AM

Steps to create a Docker image: Write a Dockerfile that contains the build instructions. Build the image in the terminal, using the docker build command. Tag the image and assign names and tags using the docker tag command.

How to start nginx server How to start nginx server Apr 14, 2025 pm 12:27 PM

Starting an Nginx server requires different steps according to different operating systems: Linux/Unix system: Install the Nginx package (for example, using apt-get or yum). Use systemctl to start an Nginx service (for example, sudo systemctl start nginx). Windows system: Download and install Windows binary files. Start Nginx using the nginx.exe executable (for example, nginx.exe -c conf\nginx.conf). No matter which operating system you use, you can access the server IP

How to run nginx apache How to run nginx apache Apr 14, 2025 pm 12:33 PM

To get Nginx to run Apache, you need to: 1. Install Nginx and Apache; 2. Configure the Nginx agent; 3. Start Nginx and Apache; 4. Test the configuration to ensure that you can see Apache content after accessing the domain name. In addition, you need to pay attention to other matters such as port number matching, virtual host configuration, and SSL/TLS settings.

How to check the name of the docker container How to check the name of the docker container Apr 15, 2025 pm 12:21 PM

You can query the Docker container name by following the steps: List all containers (docker ps). Filter the container list (using the grep command). Gets the container name (located in the "NAMES" column).

How to check whether nginx is started? How to check whether nginx is started? Apr 14, 2025 pm 12:48 PM

In Linux, use the following command to check whether Nginx is started: systemctl status nginx judges based on the command output: If "Active: active (running)" is displayed, Nginx is started. If "Active: inactive (dead)" is displayed, Nginx is stopped.

See all articles