Nginx 고급 응용 --- 성능 최적화, C100K 돌파

1. 배경
    소개:
    Nginx 는 고성능 HTTP 와 역방향 프 록 시 서버 로 효율 적 인 epoll (linux 2.6 커 널), kquue (freebsd), eventport (solaris 10) 를 네트워크 I / O 모델 로 선택 할 수 있 으 며 50000 개의 동시 접속 수의 응답 을 지원 할 수 있 으 며 메모리, CPU 등 시스템 자원 소 모 는 매우 낮 고 운행 이 매우 안정 적 이다.
   선택 한 이유:
   * 높 은 병렬 연결 지원: nginx 는 효율 적 인 다 중 재 활용 모델 (epoll / linux, kquue / freebsd, eventport / solaris) 을 사용 합 니 다.
   * 메모리 소모 가 적 음: 서버 3W 병렬 연결 에서 Nginx 프로 세 스 10 개 를 시작 하면 150 MB 메모리 소모 (15MB * 10)
   * 원가 저렴: F5 BIG - IP, NetScaler 등 부하 균형 교환 기 를 구 매 하 는 데 몇 십 만 RMB 가 필요 하 며, 이러한 상업 설 비 를 대체 하기 위해 서 는 Nginx 가 필요 하 다.
   * 기타 이유: 네트워크 설정 이 간단 합 니 다.rewrite 재 작성 규칙 을 지원 합 니 다. 도 메 인 이름, URL 에 따라 HTTP 요청 을 백 엔 드 서버 그룹 으로 나 눌 수 있 습 니 다.내 장 된 건강 검진 기능;대역 폭 을 절약 하고 GZIP 압축 을 지원 하 며 브 라 우 저 로 컬 캐 시 헤더 를 추가 할 수 있 습 니 다.열 배 치 를 지원 하여 끊 임 없 는 서비스 상황 에서 소프트웨어 버 전 을 업그레이드 할 수 있 습 니 다.
2. 환경
[root@nginx ~]$ uname -r 
2.6.32-642.13.1.el6.x86_64
[root@nginx ~]$ uname -m
x86_64
[root@nginx ~]$ cat /etc/redhat-release 
CentOS release 6.8 (Final)

3. 최적화
    * nginx 프로필 최적화
     - nginx 프로 세 스 수 는 cpu 수 에 따라 지정 하 는 것 을 권장 합 니 다. 일반적으로 배수 입 니 다.
       - worker_processes 4; 
      - 모든 프로 세 스 에 cpu 바 인 딩:
        - worker_cpu_affinity 00000001 00000010 00000100 00001000;
      - nginx 프로 세 스 가 열 린 최대 파일 설명자 수:
        - worker_rlimit_nofile 102400;
      - epoll 의 I / O 재 활용 모델 사용 하기:
        - use epoll;
      - 모든 프로 세 스 가 허용 하 는 최대 연결 수:
        - worker_connections 102400;
      - keepalive 시간 초과:
        - keepalive_timeout 60;
      - 클 라 이언 트 가 요청 한 머리의 버퍼 크기: (페이지 크기 는 명령 getconf PAGESIZE 로 가 져 올 수 있 습 니 다):
        - client_header_buffer_size 4k;
      - 파일 지정 캐 시 를 엽 니 다. 기본 값 은 사용 되 지 않 았 습 니 다. max 는 캐 시 수량 을 지정 합 니 다. 파일 을 여 는 것 과 일치 하 는 것 을 권장 합 니 다. inactive 는 파일 이 요청 되 지 않 은 지 얼마 지나 지 않 아 캐 시 를 삭제 하 는 것 을 말 합 니 다.
        - open_file_cache max=102400 inactive=20s;
      - 캐 시 에 대한 유효한 정 보 를 확인 하 는 데 얼마나 걸 릴 지 지정 합 니 다:
        - open_file_cache_valid 30s;
      - 최소 사용 횟수 를 설정 합 니 다. 이 숫자 를 초과 하면 파일 설명 자 는 캐 시 에서 열 립 니 다.
        - open_file_cache_min_uses 1;
   * 시스템 최적화
      - timewait 의 수량 은 기본적으로 180000 입 니 다.(Deven: 따라서 timewait 를 낮 추 려 면 tcp max tw buckets 값 을 줄 여야 합 니 다):
        - net.ipv4.tcp_max_tw_buckets = 6000
      - 시스템 이 열 수 있 는 포트 범위:
        - net.ipv4.ip_local_port_range = 1024     65000
      - timewait 빠 른 회수 사용 하기:
        - net.ipv4.tcp_tw_recycle = 1
      - 오픈 재사 용.TIME - WIT sockets 를 새로운 TCP 연결 에 다시 사용 할 수 있 도록 합 니 다:
        - net.ipv4.tcp_tw_reuse = 1
      - SYN 쿠키 를 시작 합 니 다. SYN 대기 열 이 넘 칠 때 cookies 를 사용 하여 처리 합 니 다.
        - net.ipv4.tcp_syncookies = 1
      - 웹 응용 프로그램 에서 listen 함수 의 backlog 는 기본적으로 커 널 매개 변수 인 net. core. somaxconn 을 128 로 제한 하고 nginx 가 정의 하 는 NGX 를 제공 합 니 다.LISTEN_BACKLOG 기본 값 511:
        - net.core.somaxconn = 262144
      - 대기 열 에 보 낼 패 킷 의 최대 수:
        - net.core.netdev_max_backlog = 262144
      - 시스템 에서 최대 몇 개의 TCP 소켓 이 사용자 파일 핸들 에 연결 되 지 않 습 니까?
        - net.ipv4.tcp_max_orphans = 262144
      - 클 라 이언 트 로부터 확인 되 지 않 은 연결 요청 의 최대 값 을 기록 합 니 다:
        - net.ipv4.tcp_max_syn_backlog = 262144
      - 시간 스탬프 는 시리 얼 번호 의 와 인 딩 을 피 할 수 있 습 니 다.
        - net.ipv4.tcp_timestamps = 0
      - 커 널 이 연결 을 포기 하기 전에 SYN + ACK 패키지 발송:
        - net.ipv4.tcp_synack_retries = 1
      - 커 널 이 연결 을 포기 하기 전에 SYN 패 키 지 를 보 내 는 수량:
        - net.ipv4.tcp_syn_retries = 1
      - FIN - WAIT - 2 상태 유지 시간:
        - net.ipv4.tcp_fin_timeout = 1
      - keepalive 가 시 작 될 때 TCP 가 keepalive 메 시 지 를 보 내 는 빈도 입 니 다.결 성 은 2 시간:
        - net.ipv4.tcp_keepalive_time = 30
4.  총결산
수요 구동 기술 로 기술 자 체 는 우략 의 구분 이 없고 업무 의 구분 만 있다.

좋은 웹페이지 즐겨찾기