nginx 대량 연결 시 502 오류 발생

문제 설명
Nginx 로그 에 대량의 upstream time out, dmesg 와 / var / log / messages 가 시스템 로 그 를 보고 많은 오류 로 그 를 발 견 했 습 니 다: ipconntrack: table full, dropping packet
 
문제 의 원인
nf_conntrack 은 3 층 에서 작업 합 니 다. 현재 연결 수 를 보 는 명령 은 다음 과 같 습 니 다.
# grep conntrack /proc/slabinfo
nf_conntrack 은 nat 와 관련 이 있 습 니 다. 연결 항목 을 추적 할 때 해시 표를 사용 하여 established 의 기록 을 기록 합 니 다.nf_conntrack 은 2. 6.15 에 도입 되 었 습 니 다. 이 해시 표 가 가득 차 면 나타 납 니 다.
nf_conntrack: table full, dropping packet
 
이 문 제 는 연결 수가 너무 많아 서 생 긴 것 이다.
 
문제 해결
문제 의 원인 에서 우 리 는 연결 수가 너무 많 기 때 문 이라는 것 을 알 수 있다. nfconntrack 의 해시 표 가 꽉 차 서 생 긴 것 이다.
그렇다면 비교적 간단 한 해결 방향 은 nfconntrack_max 수치.
 
다음 내용 을 / etc / sysctl. conf 에 추가 합 니 다.
 
Centos 6 :
1
2
3 net.nf_conntrack_max = 655360 net.netfilter.nf_conntrack_max = 655350 net.netfilter.nf_conntrack_tcp_timeout_established = 1200
Centos 5
1
2 net.ipv4.netfilter.ip_conntrack_max = 1655350 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200
 
실행 명령: sysctl -p /etc/sysctl.conf 
 
다음 오류 가 발생 하면:
error: "net.netfilter.nf_conntrack_max" is an unknown key
 실행 명령: modprobe nf_conntrack
다시 실행: sysctl - p / etc / sysctl. conf 
 
명령 통과: sysctl - a | grep nfconntrack 은 관련 매개 변수의 수 치 를 볼 수 있 습 니 다.
 
주: 여기에 net. ipv4. tcp 설정 도 추가 하 였 습 니 다.max_tw_buckets = 262144  TCP: time wait bucket table overflow 문 제 를 해결 하 는 데 사용 되 며, 대량의 포트 번 호 를 사용 하여 새 연결 이 포트 를 연결 할 수 없습니다.
 
참고 문서:
http://www.cnblogs.com/higkoo/articles/iptables_tunning_for_conntrack.html
http://www.d-kai.me/nf_conntrack-table-full-dropping-packet%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/
http://www.php-oa.com/2012/06/07/nginx-502-upstream-timed-out-110-connection-timed-out.html
 
 

좋은 웹페이지 즐겨찾기