Maison > développement back-end > Problème PHP > Comment résoudre le problème de l'exécution trop longue de la méthode php

Comment résoudre le problème de l'exécution trop longue de la méthode php

藏色散人
Libérer: 2023-03-11 19:16:01
original
5042 Les gens l'ont consulté

Solutions au long temps d'exécution de la méthode PHP : 1. Définissez le délai d'expiration de la requête de la passerelle Nginx 2. Définissez la limite supérieure du temps d'exécution du script PHP ;

Comment résoudre le problème de l'exécution trop longue de la méthode php

L'environnement d'exploitation de cet article : système windows7, version PHP7.1, ordinateur DELL G3

Comment résoudre le problème de temps d'exécution trop long de la méthode php ?

Solution au problème de 502 Bad Gateway causé par un temps d'exécution trop long de la méthode PHP

Contexte

J'ai récemment rencontré un problème Il y a un morceau de code PHP qui doit impliquer des opérations d'E/S à long terme, et. cette pièce bloquera le thread où se trouve la requête, ce qui entraînera l'expiration du délai de la requête.

Vous pourriez vous demander, qu'est-ce qui est si difficile à ce sujet ? Il suffit d'ouvrir un fil de discussion et de le faire de manière asynchrone, puis vous pouvez mettre à jour le statut. C'est vraiment une bonne solution, mais c'est dommage que tout cet ensemble de code appartienne à quelqu'un d'autre. Si vous souhaitez modifier le code, l'entreprise sera affectée, ma solution est donc de résoudre ce problème en configurant le timeout sans modifier le code autant que possible.

Solution

Parmi les problèmes ci-dessus, le délai d'attente est principalement affecté par deux facteurs :

  • Paramètre du délai d'expiration de la demande de passerelle Nginx

  • Paramètre de la limite supérieure du temps d'exécution du script PHP

Nous l'avons configuré dans l'ordre .

Paramètre du délai d'expiration de la demande de passerelle Nginx

Nginx prend en charge des paramètres de délai d'expiration très précis. Les principaux utilisés sont les suivants :

keepalive_timeout
Copier après la connexion

Nginx utilise keepalive_timeout pour spécifier le timeout de KeepAlive. Spécifie la durée maximale pendant laquelle chaque connexion TCP peut être maintenue. La valeur par défaut de Nginx est de 75 secondes. Certains navigateurs ne maintiennent qu'un maximum de 60 secondes, elle peut donc être définie sur 60 secondes.

fastcgi_connect_timeout
Copier après la connexion

Délai d'expiration pour établir la connexion au serveur FastCGI.

fastcgi_send_timeout
Copier après la connexion

Définissez le délai d'attente pour la transmission des requêtes au serveur FastCGI. Définissez le délai d'attente uniquement entre deux opérations d'écriture consécutives, et non pour la totalité du transfert demandé. Si le serveur FastCGI ne reçoit rien dans ce délai, la connexion est fermée.

fastcgi_read_timeout
Copier après la connexion

Délai d'expiration pour la lecture des réponses du serveur FastCGI. Définissez le délai d'attente uniquement entre deux opérations de lecture consécutives, et non pour le transfert de l'intégralité de la réponse. Si le serveur FastCGI ne transmet rien dans ce délai, la connexion est fermée.

Considérant que l'exécution d'un script PHP est plus pertinente pour les trois derniers paramètres. Il suffit donc d'ajouter des paramètres dans le fichier de configuration Nginx du site Web correspondant.

fastcgi_connect_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
Copier après la connexion

Paramètre de la limite supérieure du temps d'exécution du script PHP

Le temps d'exécution du script PHP est principalement affecté par deux configurations :

php.ini 中 max_execution_time 和 max_input_time
Copier après la connexion

L'emplacement par défaut de php.ini est /usr/local/php/etc/

Placez php Ces deux éléments de configuration dans le fichier de configuration .ini sont modifiés jusqu'à la limite supérieure du délai d'attente.

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
Copier après la connexion

Une fois la modification terminée, redémarrez Nginx et php-fpm.

service nginx reload
/etc/init.d/php-fpm reload
Copier après la connexion

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal