> 백엔드 개발 > PHP 문제 > PHP 메소드의 실행 시간이 너무 길어지는 문제를 해결하는 방법

PHP 메소드의 실행 시간이 너무 길어지는 문제를 해결하는 방법

藏色散人
풀어 주다: 2023-03-11 19:16:01
원래의
5038명이 탐색했습니다.

PHP 메서드의 긴 실행 시간에 대한 해결 방법: 1. Nginx 게이트웨이 요청 시간 초과를 설정합니다. 2. PHP 스크립트 실행 시간의 상한을 설정합니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿