Linux Nginx 성능 최적화 - 성능 최적화 분석, 성능 최적화, CPU 친화 설정, 유 니 버 설 설정, 인터페이스 압력 측정

  • Nginx 성능 최적화
  • 내 가 성능 최적화 가 필요 할 때 서버 가 날로 증가 하 는 업 무 를 만족 시 킬 수 없다 는 것 을 설명 한다.다음 과 같은 몇 가지 측면 에서 현재 시스템 구조의 병목 을 연구 하고 업무 모델 의 성능 과 안전 을 파악 해 야 한다.
    1. 현재 시스템 구조의 병목
    먼저 알 아야 할 것 은 현재 시스템 의 병목 이다. 어떤 응용 을 사용 하 는 지, 어떤 업 무 를 뛰 는 지, 서비스 가 무엇 인지, 모든 서비스 가 얼마나 많은 병행 을 지원 하 는 지 알 아야 한다.예 를 들 어 Nginx 에 대해 말하자면 우리 가 정적 자원 을 처리 하 는 효율 이 가장 높 은 병목 은 얼마나 큽 니까?
    현재 cpu 부하, 메모리 사용률, 프로 세 스 사용률 을 보고 간단하게 판단 할 수 있 습 니 다.또한 운영 체제 의 일부 도 구 를 통 해 현재 시스템 의 성능 병목 을 판단 할 수 있다. 예 를 들 어 대응 하 는 로 그 를 분석 하고 요청 수량 을 볼 수 있다.nginx httpstub_status_module 모듈 은 대응 하 는 연결 수, 총 악수 횟수, 총 요청 수 를 봅 니 다.또한 온라인 에서 압력 테스트 를 실시 하여 현재 시스템 의 성능, 병발 수 를 파악 하고 성능 평 가 를 잘 할 수 있다.
    2. 업무 모델 파악
    성능 최 적 화 를 할 때 업 무 를 익 혀 야 한다. 우 리 는 모든 인터페이스 업무 유형 이 어떤 업무 인지 알 아야 한다. 예 를 들 어 전자상거래 가 앞 다 투어 구 매 하면 전자상거래 의 평소에 유량 이 매우 적 지만 앞 다 투어 구 매 하 는 초 살 활동 에 이 르 러 유량 이 폭발 적 으로 증가 할 것 이다.마찬가지 로 시스템 의 등급 구 조 를 파악 해 야 한다. 각 층 이 중간 층 에서 하 는 것 이 대리 인지 동정 분리 인지 백 스테이지 에서 직접 서 비 스 를 하 는 지 알 아야 한다.우 리 는 업무 접속 층 과 시스템 차원 에 대해 정리 해 야 한다.
    3. 성능 과 안전
    성능 과 안전 도 고려 해 야 할 요소 이다. 예 를 들 어 방화벽 을 설계 할 때 규칙 이 너무 전면적 이면 성능 에 영향 을 주 고 성능 에 대해 지나치게 중시 하면 안전 에 큰 위험 을 남 길 수 있다.따라서 이들 의 관 계 를 잘 평가 하고 이들 의 경중 과 전체적인 상관 성 을 파악 하 며 대응 하 는 점 을 잘 평가 해 야 한다.
    4. 시스템 과 Nginx 성능 최적화
    시스템 병목 과 현황 을 분석 한 후에 영향 성능 에 따라 전체적인 평가 와 최 적 화 를 할 수 있다.
    네트워크 (네트워크 트 래 픽, 패 킷 을 잃 어 버 렸 는 지, 네트워크 의 안정성 은 사용자 의 요구 에 영향 을 줄 수 있 습 니 다) 시스템 (시스템 부하, 포화, 메모리 사용률, 시스템 안정성, 하드웨어 디스크 에 손상 이 있 는 지) · 서비스 (연결 최적화, 커 널 성능 최적화, http 서비스 요구 우수 화 는 모두 nginx 에서 업무 에 따라 설정 할 수 있 습 니 다) · 프로그램(인터페이스 성능, 처리 요청 속도, 모든 프로그램의 실행 효율) 데이터 베이스, 바 텀 서 비 스 · 위 에 열거 한 모든 등급 이 관련 되 고 전체적인 성능 에 도 영향 을 줄 수 있 으 며 여기 서 주목 하 는 것 은 Nginx 서비스 라 는 층 이다.
  • 파일 핸들
  • linux / unix 운영 체제 에 서 는 모든 파일 이 있 습 니 다. 사용자 가 요청 을 할 때마다 파일 핸들 이 생 깁 니 다. 파일 핸들 은 파일 핸들 이 색인 이 라 고 간단하게 이해 할 수 있 습 니 다. 파일 핸들 은 요 구 량 이 증가 함 에 따라 프로 세 스 호출 이 빈번 해 지면 서 파일 핸들 도 많아 집 니 다.
    시스템 기본 값 은 파일 핸들 에 제한 이 있 습 니 다. 프로 세 스 가 제한 없 이 핸들 을 호출 하지 않 습 니 다. 시스템 자원 이 제한 되 어 있 기 때문에 모든 서비스 가 얼마나 큰 파일 핸들 을 사용 할 수 있 는 지 제한 해 야 합 니 다. 운영 체제 에서 기본적으로 사용 하 는 파일 핸들 은 1024 개의 핸들 입 니 다.
  • 설정 방식
  • 시스템 전역 적 수정 사용자 국부 적 수정 프로 세 스 국부 적 수정
  • 시스템 전역 적 수정 과 사용자 국부 적 수정
  • [root@nginx-server ~]# vim /etc/security/limits.conf
    #*               soft    core            0
    #*               hard    rss             10000
    #@student        hard    nproc           20
    #@faculty        soft    nproc           20
    #@faculty        hard    nproc           50
    #ftp             hard    nproc           0
    #@student        -       maxlogins       4#root    root       ,soft     ,          ,             ok 
    root soft nofile 65535
    root hard nofile 65535
    # *           
    *    soft nofile 25535
    *    hard nofile 25535
    

    루트 와 * 를 볼 수 있 습 니 다. 루트 대 표 는 루트 사용자 입 니 다. * 모든 사용 자 를 대표 합 니 다. 뒤의 숫자 는 파일 핸들 크기 입 니 다. 구체 적 으로 개인 업무 에 따라 설정 할 수 있 습 니 다.
  • 프로 세 스 부분 적 수정
  • [root@nginx-server ~]# vim /etc/nginx/nginx.conf
    user  nginx;
    worker_processes  1;
    ​
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    ​
    worker_rlimit_nofile 65535; #    
    ​
    events {
         
        worker_connections  1024; #     
    }
    ​
    http {
         
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    ​
        log_format  main  '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" '
                          '"$args" "$request_uri"';
    ​
        access_log  /var/log/nginx/access.log  main;
    ​
        sendfile        on; 
        #tcp_nopush     on; 
    ​
        keepalive_timeout  65;#gzip  on; 
    ​
        include /etc/nginx/conf.d/*.conf;
    }
    

    worker rlimit nofile 은 프로 세 스 에서 제 한 됩 니 다.
    5. CPU 친화 설정
    cpu 의 친화 성 은 nginx 가 서로 다른 work 작업 프로 세 스 를 서로 다른 cpu 에 연결 시 켜 work 간 에 cpu 를 계속 전환 하 는 것 을 줄 일 수 있 고 프로 세 스 가 CPU 에서 이동 하 는 빈도 가 작 아 져 성능 손실 을 줄 일 수 있 습 니 다.
    cpu 핵심 수 보기
    [root@nginx-server ~]# cat /proc/cpuinfo|grep "cpu cores"|uniq
    

    cpu 사용량 보기
    [root@nginx-server ~]#top  #     1
    

    worker processes 설정
    [root@nginx-server ~]# vim /etc/nginx/nginx.conf
    #        cpu * cpu    worker_processes
    worker_processes 2; #    cpu     /        auto
    

    cpu
    #      2cpu,  cpu 8 ,    :
    worker_processes 16;
    worker_cpu_affinity 1010101010101010 0101010101010101;
    #  nginx 1.9    ,        cpu;
    worker_cpu_affinity auto;
    

    6. nginx 유 니 버 설 설정 최적화
    #  nginx         ,      
    user nginx;#     worker  ,             
    worker_processes 2;
    #   ,        
    worker_cpu_affinity auto;#     warn
    error_log /var/log/nginx/error.log warn; 
    pid /var/run/nginx.pid;#   nginx        
    worker_rlimit_nofile 35535;
    #    
    events {
         
        #  epoll    
        use epoll;
        #              ,              worker_processes * 1024
        worker_connections 10240;
    }
    ​
    http {
         
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    ​
        charset utf-8;  #     #        ,         
        log_format  main  '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for" '
                          '"$args" "$request_uri"';
    ​
        access_log  /var/log/nginx/access.log  main;
    ​
        sendfile        on;   #            
        #tcp_nopush     on;   #              
    ​
        keepalive_timeout  65;########
        #Gzip module
        gzip  on;    #          
    ​
        include /etc/nginx/conf.d/*.conf;
    }
    

    7. ab 인터페이스 압력 테스트 도구
    ab 는 Apache 하이퍼텍스트 전송 프로 토 콜 (HTTP) 의 성능 테스트 도구 입 니 다. 현재 설 치 된 Apache 의 실행 성능 을 테스트 하 는 것 이 목적 입 니 다. 주로 Apache 가 초당 몇 개의 요청 을 처리 할 수 있 는 지 보 여 줍 니 다.
    [root@nginx-server ~]# yum install httpd-tools -y
    [root@nginx-server ~]# ab -n 2000 -c 2 http://127.0.0.1/
    -n      
    -c    
    

  • 매개 변수 옵션
  • -n: requests,               
    -c: concurrency,        
    -t: timelimit,         ()
    -b: windowsize,TCP  /       ()
    -p: postfile,  POST          ,       -T  
    -u: putfile,  PUT          ,       -T  
    -T: content-type,    Content-Type     ,  :application/x-www-form-urlencoded,    text/plain
    -v: verbosity,             
    -w: HTML        
    -i:  HEAD    GET  
    -x:       table     
    -y:       tr     
    -z:       td     
    -C:  cookie  ,  :"Apache=1234"(              )
    -H:        ,  :"Accept-Encoding: gzip"(              )
    -A:             ,               
    -P:             ,               
    -X:         ,  :"126.10.10.3:88"
    -V:        
    -k:  HTTP KeepAlive  
    -d:      
    -S:          
    -g:       gnuplot      
    -e:       CSV      
    -r:               
    -H:      ,    ab -help
    
  • 내용 해석
  • Server Software:        nginx/1.10.2 (            )
    Server Hostname:        192.168.1.106(      )
    Server Port:            80 (     )
    ​
    Document Path:          /index1.html. (    URL  )
    Document Length:        3721 bytes (    URL       )
    ​
    Concurrency Level:      1000 (   )
    Time taken for tests:   2.327 seconds (          )
    Complete requests:      5000 (    )
    Failed requests:        688 (      )
    Write errors:           0 (         )
    Total transferred:      17402975 bytes (       )
    HTML transferred:       16275725 bytes (HTML       )
    Requests per second:    2148.98 [#/sec] (mean) (        )             ,        
    Time per request:       465.338 [ms] (mean) (      (   1000)          )
    Time  request:          0.247 [ms] (mean, across all concurrent requests) (             )
    Transfer rate:          7304.41 [Kbytes/sec] received           (    ,  :KB/s)
    ...
    Percentage of the requests served within a certain time (ms)
      50%    347  ## 50%    347ms    
      66%    401  ## 60%    401ms    
      75%    431
      80%    516
      90%    600
      95%    846
      98%   1571
      99%   1593
      100%   1619 (longest request)
    
  • 예시 주의사항
  • ● 테스트 기 는 피 테스트 기와 분리 해 야 한다 ● 온라인 서버 에 대한 압력 테스트 를 하지 마라 ● 테스트 도구 ab 가 있 는 기 계 를 관찰 하고 테스트 되 는 기기 의 CPU, 메모리, 네트워크 등 은 최고 한도 의 75% 를 넘 지 않 는 다.
    [root@nginx-server ~]# ab -n 50 -c 2 http://www.testpm.cn/
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    ​
    Benchmarking www.testpm.cn (be patient).....done
    ​
    ​
    Server Software:        nginx/1.16.0
    Server Hostname:        www.testpm.cn
    Server Port:            80
    ​
    Document Path:          /
    Document Length:        612 bytes
    ​
    Concurrency Level:      2
    Time taken for tests:   2.724 seconds
    Complete requests:      50
    Failed requests:        0
    Write errors:           0
    Total transferred:      42250 bytes
    HTML transferred:       30600 bytes
    Requests per second:    18.35 [#/sec] (mean)
    Time per request:       108.968 [ms] (mean)
    Time per request:       54.484 [ms] (mean, across all concurrent requests)
    Transfer rate:          15.15 [Kbytes/sec] received
    ​
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:       42   52  17.3     46     137
    Processing:    43   54  20.8     47     170
    Waiting:       42   53  20.7     47     170
    Total:         84  106  28.9     93     219
    ​
    Percentage of the requests served within a certain time (ms)
      50%     93
      66%     96
      75%    101
      80%    130
      90%    153
      95%    161
      98%    219
      99%    219
     100%    219 (longest request)
    

    END

    좋은 웹페이지 즐겨찾기