nginx로 작은 VPS 설정이 있습니다. 최대한 많은 성능을 발휘하고 싶기 때문에 최적화 및로드 테스트를 실험하고 있습니다.
Blitz.io를 사용하여 작은 정적 텍스트 파일을 가져 와서로드 테스트를 수행하고 동시 연결 수가 약 2000에 도달하면 서버가 TCP 재설정을 보내는 것처럼 보이는 이상한 문제가 발생합니다. 많은 양이지만 htop을 사용하여 서버에 여전히 CPU 시간과 메모리를 아끼지 않아도 되므로이 문제의 원인을 파악하여 더 밀어 넣을 수 있는지 확인하고 싶습니다.
2GB Linode VPS에서 Ubuntu 14.04 LTS (64 비트)를 실행하고 있습니다.
이 그래프를 직접 게시 할 정도로 평판이 좋지 않으므로 Blitz.io 그래프에 대한 링크가 있습니다.
다음은 문제의 원인을 파악하기 위해 수행 한 작업입니다.
- nginx 구성 값
worker_rlimit_nofile
이 8192로 설정되었습니다. - 한
nofile
모두 하드와 소프트 한계에 대한 64000로 설정root
하고www-data
사용자 (로 실행을 nginx에 무엇을)에서/etc/security/limits.conf
아무것도 잘못되었다는 징후가 없습니다
/var/log/nginx.d/error.log
(일반적으로 파일 디스크립터 한계에 도달하면 nginx가 오류 메시지를 표시합니다)ufw 설정이 있지만 속도 제한 규칙이 없습니다. ufw 로그는 아무것도 차단되지 않았 음을 나타내며 동일한 결과로 ufw를 비활성화하려고 시도했습니다.
- 에 표시 오류가 없습니다
/var/log/kern.log
- 에 표시 오류가 없습니다
/var/log/syslog
다음 값을 추가하고 아무런 효과없이
/etc/sysctl.conf
로드했습니다sysctl -p
.net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 net.core.netdev_max_backlog = 2000
어떤 아이디어?
편집 : 새로운 테스트를 수행하여 매우 작은 파일 (3 바이트 만)에서 3000 연결로 상승했습니다. Blitz.io 그래프는 다음과 같습니다.
다시 한번, Blitz에 따르면 이러한 모든 오류는 "TCP 연결 재설정"오류입니다.
Linode 대역폭 그래프는 다음과 같습니다. 이것은 평균 5 분이므로 로우 패스가 비트를 필터링 (순간 대역폭이 훨씬 높을 수 있음)하지만 여전히 아무것도 아닙니다.
CPU :
I / O :
htop
테스트 가 거의 끝났습니다.
또한 다른 (그러나 비슷한 모양의) 테스트에서 tcpdump를 사용하여 일부 트래픽을 캡처하여 오류가 발생하기 시작했을 때 캡처를 시작했습니다.
sudo tcpdump -nSi eth0 -w /tmp/loadtest.pcap -s0 port 80
누군가가 그것을 보길 원한다면 파일은 다음과 같습니다 (~ 20MB) : https://drive.google.com/file/d/0B1NXWZBKQN6ETmg2SEFOZUsxV28/view?usp=sharing
Wireshark의 대역폭 그래프는 다음과 같습니다.
(라인은 모든 패킷, 파란색 막대는 TCP 오류입니다)
캡처에 대한 나의 해석 (그리고 나는 전문가가 아닙니다)에서 TCP RST 플래그가 서버가 아닌로드 테스트 소스에서 오는 것처럼 보입니다. 따라서로드 테스트 서비스 측면에서 잘못된 것이 아니라고 가정하면 이것이로드 테스트 서비스와 내 서버 간의 일종의 네트워크 관리 또는 DDOS 완화의 결과라고 가정하는 것이 안전합니까?
감사!
net.core.netdev_max_backlog
2000 까지만 설정 한 이유가 있습니까? 내가 본 몇 가지 예는 기가비트 (및 10Gig) 연결에 대해 10 배 더 높습니다.