이 오류 이해 : apr_socket_recv : 피어에 의한 연결 재설정 (104)


14

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

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

apr_socket_recv: Connection reset by peer (104)

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

아이디어?

답변:


7

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


4

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

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


0

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

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)


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

-1

이 문제는 시스템으로 인해 발생합니다. 시스템에 동시성 요청이 높은 경우 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를 사용하여로드 테스트 또는 성능 테스트를 수행하려면이 기능을 닫아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.