Home  >  Article  >  Backend Development  >  How to solve the problem of php method execution taking too long

How to solve the problem of php method execution taking too long

藏色散人
藏色散人Original
2021-07-23 10:51:324985browse

Solution to the problem that the php method execution time is too long: 1. Set the Nginx gateway request timeout; 2. Set the upper limit of the PHP script execution time.

How to solve the problem of php method execution taking too long

The operating environment of this article: windows7 system, PHP7.1 version, DELL G3 computer

How to solve the problem of too long execution time of the php method?

Solution to 502 Bad Gateway caused by too long execution time of PHP method

Background

Recently encountered a problem, there is a piece of PHP code that needs to involve a long IO operation of time, and this period will block the thread where the request is located, causing the request to time out.

You may say, what's so difficult about this? Just open a thread to do it asynchronously, and then it's OK to update the status. This is really a good solution, but it's a pity that this entire set of code belongs to someone else. If you want to modify the code, the business will be affected, so my solution is to solve this problem by configuring the timeout without modifying the code as much as possible.

Solution

From the above problem, the timeout is mainly affected by two factors:

  • Nginx gateway request Timeout setting

  • PHP script execution time upper limit setting

We set it in sequence.

Nginx gateway request timeout setting

Nginx supports very fine-grained timeout settings. The main ones used are as follows:

keepalive_timeout

Nginx uses keepalive_timeout to specify the timeout of KeepAlive. Specifies the maximum length of time each TCP connection can be maintained. The default value of Nginx is 75 seconds. Some browsers only maintain a maximum of 60 seconds, so it can be set to 60 seconds.

fastcgi_connect_timeout

Timeout for establishing a connection with the FastCGI server.

fastcgi_send_timeout

Set the timeout for transmitting requests to the FastCGI server. Set the timeout only between two consecutive write operations, not for the entire requested transfer. If the FastCGI server does not receive anything within this time, the connection is closed.

fastcgi_read_timeout

Timeout for reading the response from the FastCGI server. Set the timeout only between two consecutive read operations, not for the transfer of the entire response. If the FastCGI server does not transmit anything within this time, the connection is closed.

Considering that the execution of a PHP script is more relevant to the last three settings. So just add settings in the Nginx configuration file of the corresponding website.

fastcgi_connect_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

PHP script execution time upper limit setting

The execution time of PHP script is mainly affected by two configurations:

php.ini 中 max_execution_time 和 max_input_time

php.ini The default location is /usr/local/php/etc/

Modify these two configuration items in the php.ini configuration file to the upper limit of the timeout period.

max_execution_time = 600
max_input_time = 600
php-fpm.conf 中 request_terminate_timeout
php-fpm.conf 的默认位置在 /usr/local/php/etc/
request_terminate_timeout 也设置为超时时间的上限。
request_terminate_timeout = 600

After the modification is completed, restart Nginx and php-fpm.

service nginx reload
/etc/init.d/php-fpm reload

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of How to solve the problem of php method execution taking too long. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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