2009-11-14 14 views
16

나는 fastcgi와 함께 nginx를 사용합니다. 오류 로그에 다음과 같은 오류가 많이 있습니다.nginx 오류 readv() 및 recv() 실패

readv() failed (104: Connection reset by peer) while reading upstream and recv() failed (104: Connection reset by peer) while reading response header from upstream

응용 프로그램 사용에 문제가 없습니다. 이러한 오류가 심각하거나이를 제거하는 방법입니다.

답변

10

저는 백그라운드에서 php-fpm을 사용하고 있었고 그런 식으로 구성된 이유 때문에 저속 스크립트가 죽었다는 말입니다. 따라서 php-fpm 엔진/프로세스에서 연결이 닫히기 때문에 지정된 시간보다 오래 걸리는 스크립트는 종료되고 nginx는 recv 또는 readv 오류를보고합니다.

+1

실제로 PHP 오류 로그 또는 메시지를 얻는 방법을 찾았습니까? – Bretticus

+0

예 php-fpm-slow 로그. 이 로그를 사용하려면 php-fpm.conf를 설정해야합니다. – rampr

2

몇 가지 의미가 있으므로 매우 모호한 오류입니다. 핵심은 가능한 모든 로그를보고 파악하는 것입니다. 필자의 경우 아마도 다소 독창적 인 일 이었지만, 작동하는 nginx + php/fastcgi 설정이있었습니다. PHP-FPM으로 PHP의 새로운 업데이트 된 버전을 컴파일하고 싶었습니다. 그 이유는 다운 타임을 감수 할 수없는 라이브 서버에서 작업하고 있기 때문입니다. 그래서 나는 가능한 한 매끄럽게 PHP-FPM으로 업그레이드하고 옮겨야했습니다.

따라서 PHP 인스턴스가 2 개 있습니다.

  • 1 직접 FastCGI를 함께 (PHP 5.3.4) 이야기 - 유닉스 소켓을 사용하여 - -
  • 1 PHP-FPM로 구성 TCP/127.0.0.1:9000 (PHP 5.3.4)를 사용하여 UNIX :/디렉토리// 소켓 FPM (PHP 5.3.8)

내가이 상류 에러를 받기 시작 대신 TCP의 소켓 연결을 사용하여 nginx를 가상 호스트에 PHP-FPM (PHP 5.3.8을)를 시작하면에 fastcgi 페이지가 FPM을 사용하던 아니던간에 x 분 이상 걸립니다. 일반적으로 mysql에서 큰 SELECTS를 수행하는 페이지는로드하는 데 ~ 2 분이 걸렸습니다. 나도 알아,하지만 이것은 백 엔드 DB 설계 때문입니다.

내가 수정 한 내용은 내 가상 호스트 구성에 추가했습니다. fastcgi_read_timeout 5m; 이제이 설정을 nginx 전역 fastcgi 설정에 추가 할 수 있습니다. 귀하의 설정에 따라 다릅니다. http://wiki.nginx.org/HttpFcgiModule

1

Answer # 2. 흥미롭게도 fastcgi_read_timeout 5m; 나를 위해 하나의 귀신을 고쳤다. 그러나 phpinfo()를 실행하여 다른 가상 호스트에서 여전히 오류가 발생했습니다. 나를 위해이 문제를 해결하기 위해 기본 프로덕션 php.ini 파일을 복사하고 필요한 구성을 추가했습니다. 내가 가지고 있었던 것은 이전 php.ini 파일의 오래된 복사본이었습니다. 일단 '공유'에서 기본 php.ini를 삽입하고 필요한 확장 및 구성에 추가하면 내 문제가 해결되고 더 이상 nginx 오류가 발생하지 않습니다. readv() 및 recv()가 실패했습니다.

2 가지 수정 중 1 가지가 도움이되기를 바랍니다. 이 오류에 관한

3

:

readv() failed (104: Connection reset by peer) while reading upstream and recv() failed (104: Connection reset by peer) while reading response header from upstream

난 아직도이 볼 수있는 한 많은 사건이 있었다. 빠른 설정 개요 : PHP-FPM 5.3

  • 에 CentOS 5.5
  • PHP.8 PHP-FPM 풀 설정에 = YES뿐만 아니라 PHP-FPM 오류 로그보고 catch_workers_output을 활성화 한 후
  • 의 Nginx 1.0.5

(일부 제 3 자 처음부터 모듈을 컴파일) , 나는이 사건의 근본 원인이 amfext 모듈 (플래시 용 PHP 모듈)이라는 사실을 발견했다. amf.c 파일을 수정하여 수정할 수있는 a known bug and fix for this module이 있습니다.

이 PHP 확장 문제를 수정 한 후 위 오류는 더 이상 문제가되지 않습니다.

0

또한 매우 간단한 문제 일 수 있습니다. 코드 어딘가에 무한대가 있거나 페이지에 외부 호스트를 연결하려고하는 무한대가 있습니다.

0

거대한 요청 때문에이 문제가 발생하는 경우가 있습니다. 기본적으로 php5-fpm의 pm.max_requests은 100 이하일 수 있습니다. ,

예 500

를 들어,이 사이트의 요청에 따라 그 값을 증가 해결하고 후에 당신은

sudo service php5-fpm restart 
0

기타가 fastcgi_read_timeout 매개 변수를 언급 한 서비스를 다시 시작해야합니다 이 파일은 nginx.conf 파일에 있습니다.

http { 
    ... 
    fastcgi_read_timeout 600s; 
    ... 
} 

그 외에도 t 오 파일에 request_terminate_timeout, 설정 을 변경 : 정보의

request_terminate_timeout = 0 

소스 /etc/php5/fpm/pool.d/www.conf (php.ini의 매개 변수를 변경하기위한 몇 가지 다른 권장 사항도 있습니다, 어떤 경우에는 관련이있을 수 있습니다.) https://ma.ttias.be/nginx-and-php-fpm-upstream-timed-out-failed-110-connection-timed-out-or-reset-by-peer-while-reading/