PHP 메서드의 긴 실행 시간에 대한 해결 방법: 1. Nginx 게이트웨이 요청 시간 초과를 설정합니다. 2. PHP 스크립트 실행 시간의 상한을 설정합니다.
이 기사의 운영 환경: windows7 시스템, PHP7.1 버전, DELL G3 컴퓨터
PHP 방식의 실행 시간이 너무 길어지는 문제를 해결하는 방법은 무엇입니까?
PHP 메소드의 실행 시간이 너무 길어서 발생하는 502 Bad Gateway 문제에 대한 해결책
Background
최근에 장기적인 IO 작업이 필요한 PHP 코드 조각이 있습니다. 이 조각은 요청이 있는 스레드를 차단하여 요청 시간이 초과되었습니다.
이게 뭐가 그렇게 어렵다고 말할 수도 있나요? 스레드를 열고 비동기적으로 수행한 다음 상태를 업데이트해도 괜찮습니다. 이것은 정말 좋은 해결책이지만, 이 전체 코드 세트가 다른 사람의 것이라는 점은 안타깝습니다. 코드를 수정하면 비즈니스에 영향을 주게 되므로 최대한 코드를 수정하지 않고 타임아웃을 구성하여 이 문제를 해결하는 것이 제 해결 방법입니다.
해결 방법
위의 문제 중에서 타임아웃은 주로 두 가지 요소에 의해 영향을 받습니다.
Nginx 게이트웨이 요청 시간 초과 설정
PHP 스크립트 실행 시간 상한 설정
순서대로 설정했습니다. .
Nginx 게이트웨이 요청 시간 초과 설정
Nginx는 매우 세분화된 시간 초과 설정을 지원합니다. 주로 사용되는 것은 다음과 같습니다.
keepalive_timeout
Nginx는 keepalive_timeout을 사용하여 KeepAlive의 시간 초과를 지정합니다. 각 TCP 연결이 유지될 수 있는 최대 시간을 지정합니다. Nginx의 기본값은 75초입니다. 일부 브라우저에서는 최대 60초만 유지하므로 60초로 설정할 수 있습니다.
fastcgi_connect_timeout
FastCGI 서버 연결 설정 시간이 초과되었습니다.
fastcgi_send_timeout
FastCGI 서버로 요청을 전송하는 시간 제한을 설정하세요. 요청된 전체 전송이 아닌 두 개의 연속 쓰기 작업 사이에만 시간 제한을 설정합니다. FastCGI 서버가 이 시간 내에 아무것도 수신하지 못하면 연결이 닫힙니다.
fastcgi_read_timeout
FastCGI 서버에서 응답을 읽는 데 시간이 초과되었습니다. 전체 응답 전송에 대한 것이 아니라 두 개의 연속 읽기 작업 사이에만 시간 초과를 설정하십시오. FastCGI 서버가 이 시간 내에 아무 것도 전송하지 않으면 연결이 닫힙니다.
PHP 스크립트 실행이 마지막 세 가지 설정과 더 관련이 있다는 점을 고려해보세요. 따라서 해당 웹사이트의 Nginx 구성 파일에 설정을 추가하면 됩니다.
fastcgi_connect_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s;
PHP 스크립트 실행 시간 상한 설정
PHP 스크립트 실행 시간은 주로 두 가지 구성에 영향을 받습니다.
php.ini 中 max_execution_time 和 max_input_time
php.ini의 기본 위치는 /usr/local/php/etc/
Place php입니다. .ini 구성 파일의 두 구성 항목이 시간 초과 시간의 상한선으로 수정되었습니다.
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
수정이 완료되면 Nginx와 php-fpm을 다시 시작하세요.
service nginx reload /etc/init.d/php-fpm reload
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP 메소드의 실행 시간이 너무 길어지는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!