태그 보관물: nginx

nginx

이 오류 이해 : apr_socket_recv : 피어에 의한 연결 재설정 (104) 사용합니다. 그런

따라서 아파치 벤치 마크 (ab)로 벤치마킹을하고 많은 수의 요청을 사용합니다. 그런 다음 때로는 테스트 도중에이 오류가 발생합니다.

나는 그것이 무엇을 의미하는지조차 모른다. 어떻게 해결할 수 있습니까? 아니면 서버가 너무 많은 히트를 얻는 경우 발생할 수있는 것입니까? 문제는 내가 1 만타를 실행하면 모두 완벽하게 실행된다는 것입니다. 다시 실행하면 4000이되고 오류가 발생합니다.

apr_socket_recv: Connection reset by peer (104)

내 설정에 대해 조금 : nginx가 정적 요청을 가져 와서 동적 요청을 처리합니다. 문제의 파일은 nginx가 캐시에서 제공하므로 nginx가 요청을 처리하는 방법과 관련이있을 것 같습니다.

아이디어?



답변

오류는 세션 중간에 다른 쪽 끝 (웹 서버)이 갑자기 연결 해제되었음을 의미합니다. 아파치 또는 nginx 오류 로그를 살펴보고 의심스러운 부분이 있는지 확인하십시오.


답변

즉, 서버에 요청이 많이로드되었습니다. 즉, 모든 스레드가 요청을 처리하는 중입니다. 솔루션 : server.xml 파일에서 커넥터의 maxThread 속성 수를 늘리거나 acceptCount 속성 값을 늘리십시오.

acceptcount : 가능한 모든 요청 처리 스레드가 사용 중일 때 들어오는 연결 요청의 최대 큐 길이입니다. 큐가 가득 찼을 때 수신 된 요청은 거부됩니다.


답변

나는 같은 문제가 있었고 내 서버 버전은 다음과 같습니다.

Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9 PHP/5.6.5 mod_perl/2.0.9dev Perl/v5.16.3

불필요한 모듈을 제거했는데 문제가 사라졌습니다.

Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips

따라서 mod_fcgid , mod_php 또는 mod_perl 중 하나 가 문제를 일으키는 것입니다. 사용하지 않는 경우 비활성화 할 수 있습니다.

(부록 참고 : opcache를 사용하는 경우 fast_shutdown도 비활성화하십시오. 문제도 발생했습니다 : opcache.fast_shutdown = 0)


답변

여기에 대한 답변 외에도 많은 다른 것들을 읽었습니다.

그들 중 누구도 도와주지 않았습니다.

나는 비슷한 투쟁wrk 을 본 후에 전환에 대해 생각 했다 .

문제 찾기

문제는 ephermal 포트 의 양과 관련이있는 것 같습니다 . 포트 범위이므로 50000에서 25000으로 설정하려고했습니다. 아직 운이 없다. 그런 다음 TIME_WAIT 및 이 블로그 게시물 과 관련된 인상을 받았습니다 . 나는 그것을 확인할 수 있다고 생각한다.

$ netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n

    1 CLOSE_WAIT
    1 established)
    1 Foreign
    4 LISTEN
    8 SYN_SENT
   62 SYN_RECV
  351 ESTABLISHED
13916 TIME_WAIT

내가 시도한 것

나는 지금까지 그것을 고치지 않았다 :-/

에 따르면 sudo sysctl -a | grep net.ipv4.tcp, 나는 가지고있다 :

net.ipv4.tcp_tw_reuse = 0    # No luck setting only that to 1
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_fin_timeout = 60  # Setting it to 5 didn't help either


답변

이 문제는 시스템으로 인해 발생합니다. 시스템에 동시성 요청이 높은 경우 OS 커널은 SYN 플러드 방지를 트리거합니다. 따라서 시스템은 링크를 재설정합니다. 파일에서 OS 구성을 수정할 수 있습니다.

#vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0 # set value is 0
#sysctl -p # read config from the config file.

당신은 그것을 시도 할 수 있습니다.

일반적으로이 속성 net.ipv4.tcp_syncookies은 대규모 요청 공격을 피하기 위해 OS를 보호하는 데 사용되었습니다. 그러나이 OS를 사용하여로드 테스트 또는 성능 테스트를 수행하려면이 기능을 닫아야합니다.


답변