경량급 HTTP 서버 Nginx (Nginx 성능 최적화 기법)

1. 컴 파일 설치 과정 최적화
1. Nginx 컴 파일 후의 파일 크기 를 줄 이 고 Nginx 를 컴 파일 할 때 기본적으로 debug 모드 로 진행 되 며, debug 모드 에 서 는 추적 과 ASSERT 같은 정 보 를 많이 삽입 합 니 다. 컴 파일 이 완료 되면 Nginx 는 여러 메가바이트 가 있어 야 합 니 다.컴 파일 하기 전에 Nginx 의 debug 모드 를 취소 합 니 다. 컴 파일 이 끝 난 후에 Nginx 는 수천 바이트 밖 에 없 기 때문에 컴 파일 하기 전에 관련 소스 코드 를 수정 하고 debug 모드 를 취소 할 수 있 습 니 다. 구체 적 인 방법 은 다음 과 같 습 니 다. Nginx 소스 코드 파일 이 압축 을 풀 린 후에 소스 디 렉 터 리 에 있 는 auto / cc / gcc 파일 을 찾 으 면 다음 과 같은 몇 줄 을 찾 을 수 있 습 니 다.

  
  
  
  
  1. # debug  
  2. CFLAGS=”$CFLAGS -g”  

이 두 줄 을 주석 하거나 삭제 하면 debug 모드 를 취소 할 수 있 습 니 다.
2. 특정 CPU 를 위 한 CPU 타 입 컴 파일 최적화 Nginx 컴 파일 시 기본 GCC 컴 파일 매개 변 수 는 "- O" 입 니 다. GCC 컴 파일 을 최적화 하려 면 다음 과 같은 두 가지 매개 변 수 를 사용 할 수 있 습 니 다. - with - cc - opt = '- O3' -- with - cpu - opt = CPU  #특정 CPU 컴 파일 을 위 한 유효한 값 은 pentium, pentiumpro, pentium 3, pentium 4, athlon, opteron, amd 64, sparc 32, sparc 64, ppc 64 를 포함 합 니 다. CPU 종 류 를 확인 하려 면 다음 명령 을 사용 할 수 있 습 니 다. [root@localhost home]#cat /proc/cpuinfo | grep "model name"
2. TCMalloc 를 이용 하여 Nginx 의 성능 을 최적화 합 니 다. TCMalloc 의 전 칭 은 Thread - Catching Malloc 이 고 구 글 이 개발 한 오픈 소스 도구 인 'google - perftools' 의 한 구성원 입 니 다.표준 glibc 라 이브 러 리 의 malloc 에 비해 TCMalloc 라 이브 러 리 는 메모리 배분 효율 과 속도 가 훨씬 높 습 니 다. 이 는 서버 가 높 은 병행 상황 에서 의 성능 을 어느 정도 향상 시 켜 시스템 부하 가 낮 아 집 니 다.Nginx 에 TCMalloc 라 이브 러 리 지원 을 추가 하 는 방법 을 간단히 소개 합 니 다.TCMalloc 라 이브 러 리 를 설치 하려 면 libunwind (32 비트 운영 체제 설치 필요 없 음) 와 google - perftools 두 개의 패 키 지 를 설치 해 야 합 니 다. libunwind 라 이브 러 리 는 64 비트 CPU 와 운영 체제 기반 프로그램 에 기본 함수 호출 체인 과 함수 호출 레지스터 기능 을 제공 합 니 다.다음은 TCMalloc 를 이용 하여 Nginx 를 최적화 하 는 구체 적 인 조작 과정 을 소개 한다.
1. libunwind 라 이브 러 리 를 설치 하면http://download.savannah.gnu.org/releases/libunwind해당 libunwind 버 전 을 다운로드 합 니 다. 여기 서 다운로드 한 것 은 libunwind - 0.99 - alpha. tar. gz 입 니 다. 설치 과정 은 다음 과 같 습 니 다. 

  
  
  
  
  1. [root@localhost home]#tar zxvf libunwind-0.99-alpha.tar.gz  
  2. [root@localhost home]# cd libunwind-0.99-alpha/  
  3. [root@localhost libunwind-0.99-alpha]#CFLAGS=-fPIC ./configure  
  4. [root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC  
  5. [root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC install  

2. google - perftools 를 설치 하면http://google-perftools.googlecode.com구 글 - perftools 버 전 을 다운로드 합 니 다. 구 글 - perftools - 1.8. tar. gz 를 다운로드 합 니 다. 설치 과정 은 다음 과 같 습 니 다. 

  
  
  
  
  1. [root@localhost home]#tar zxvf google-perftools-1.8.tar.gz  
  2. [root@localhost home]#cd google-perftools-1.8/  
  3. [root@localhost google-perftools-1.8]# ./configure  
  4. [root@localhost google-perftools-1.8]#make && make install  
  5. [root@localhost google-perftools-1.8]#echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf  
  6. [root@localhost google-perftools-1.8]# ldconfig  

이로써 구 글 - perftools 설치 가 완료 되 었 습 니 다.
3. Nginx 를 다시 컴 파일 합 니 다. Nginx 가 google - perftools 를 지원 하기 위해 서 는 설치 과정 에서 "– with - google perftools module" 옵션 을 추가 하여 Nginx 를 다시 컴 파일 해 야 합 니 다. 설치 코드 는 다음 과 같 습 니 다. 

  
  
  
  
  1. [[email protected]]#./configure \  
  2. >--with-google_perftools_module --with-http_stub_status_module  --prefix=/opt/nginx  
  3. [root@localhost nginx-0.7.65]#make  
  4. [root@localhost nginx-0.7.65]#make install  

여기까지. Nginx 설치 완료.
4. google - perftools 에 스 레 드 디 렉 터 리 를 추가 하여 스 레 드 디 렉 터 리 를 만 듭 니 다. 여 기 는 파일 을 / tmp / tcmaloc 에 두 고 다음 과 같이 작 동 합 니 다. 

  
  
  
  
  1. [root@localhost home]#mkdir /tmp/tcmalloc  
  2. [root@localhost home]#chmod 0777 /tmp/tcmalloc  

5. Nginx 메 인 프로필 을 수정 하여 nginx. conf 파일 을 수정 하고 pid 줄 아래 에 다음 코드 를 추가 합 니 다. 

  
  
  
  
  1. #pid        logs/nginx.pid;  
  2. google_perftools_profiles /tmp/tcmalloc;  

이 어 Nginx 를 다시 시작 하여 google - perftools 로 딩 을 완료 합 니 다.
6. 실행 상 태 를 검증 합 니 다. google - perftools 가 정상적으로 불 러 왔 음 을 검증 하기 위해 다음 명령 을 통 해 확인 합 니 다. 

  
  
  
  
  1. [root@ localhost home]# lsof -n | grep tcmalloc  
  2. nginx      2395 nobody   9w  REG    8,8       0    1599440 /tmp/tcmalloc.2395  
  3. nginx      2396 nobody   11w REG   8,8       0    1599443 /tmp/tcmalloc.2396  
  4. nginx      2397 nobody   13w REG  8,8        0    1599441  /tmp/tcmalloc.2397  
  5. nginx     2398 nobody    15w REG  8,8     0    1599442 /tmp/tcmalloc.2398  

Nginx 프로필 에 worker 를 설정 하기 때 문 입 니 다.processes 의 값 이 4 이기 때문에 4 개의 Nginx 스 레 드 를 열 었 습 니 다. 스 레 드 마다 한 줄 의 기록 이 있 습 니 다.각 스 레 드 파일 뒤의 숫자 값 은 시작 하 는 Nginx 의 PID 값 입 니 다.이로써 TCMalloc 를 이용 해 Nginx 의 조작 을 최적화 했다.
3. Nginx 커 널 매개 변 수 는 커 널 매개 변수 에 대한 최적화 이 고 주로 Linux 시스템 에서 Nginx 응용 에 대한 시스템 커 널 매개 변수 최적화 이 며 흔히 볼 수 있 는 최적화 매개 변수 수 치 는 다음 과 같다.참고 할 수 있 도록 최 적 화 된 실례 를 제시 합 니 다.

  
  
  
  
  1. net.ipv4.tcp_max_tw_buckets = 6000 
  2. net.ipv4.ip_local_port_range = 1024 65000  
  3. net.ipv4.tcp_tw_recycle = 1 
  4. net.ipv4.tcp_tw_reuse = 1 
  5. net.ipv4.tcp_syncookies = 1 
  6. net.core.somaxconn = 262144 
  7. net.core.netdev_max_backlog = 262144 
  8. net.ipv4.tcp_max_orphans = 262144 
  9. net.ipv4.tcp_max_syn_backlog = 262144 
  10. net.ipv4.tcp_synack_retries = 1 
  11. net.ipv4.tcp_syn_retries = 1 
  12. net.ipv4.tcp_fin_timeout = 1 
  13. net.ipv4.tcp_keepalive_time = 30 

위의 커 널 매개 변수 값 을 / etc / sysctl. conf 파일 에 추가 한 다음 다음 명령 을 실행 하여 효력 을 발생 시 킵 니 다. [root @ localhost home] \ # sbin / sysctl - p 다음은 인 스 턴 스 에서 옵션 의 의 미 를 소개 합 니 다. net.ipv4.tcp_max_tw_buckets 인 자 는 timewait 의 수량 을 설정 하 는 데 사 용 됩 니 다. 기본 값 은 180000 이 고 여 기 는 6000 입 니 다. net.ipv4.ip_local_port_range 옵션 은 시스템 이 열 수 있 는 포트 범 위 를 설정 합 니 다. net.ipv4.tcp_tw_recycle 옵션 은 timewait 를 사용 하여 빠르게 회수 할 수 있 도록 설정 합 니 다. net.ipv4.tcp_tw_재사 용 설정 을 사용 하면 TIME - WAIT sockets 를 새 TCP 연결 에 다시 사용 할 수 있 습 니 다. net.ipv4.tcp_syncookies 옵션 은 SYN Cookies 를 설정 하 는 데 사 용 됩 니 다. SYN 대기 열 이 넘 칠 때 cookies 를 사용 하여 처리 합 니 다. net. core. somxconn 옵션 의 기본 값 은 128 입 니 다. 이 매개 변 수 는 시스템 이 동시에 시작 하 는 tcp 연결 수 를 조절 하 는 데 사 용 됩 니 다. 높 은 동시 다발 요청 에서 기본 값 은 링크 가 시간 을 초과 하거나 재 전송 될 수 있 으 므 로 동시 다발 요청 수 를 결합 하여 이 값 을 조절 해 야 합 니 다. net.core.netdev_max_backlog 옵션 은 모든 네트워크 인터페이스 에서 패 킷 을 받 는 속도 가 커 널 에서 이 패 킷 을 처리 하 는 속도 보다 빠 를 때 대기 열 에 보 내 는 패 킷 의 최대 수 를 허용 합 니 다. net.ipv4.tcp_max_orphans 옵션 은 시스템 에서 최대 몇 개의 TCP 소켓 이 사용자 파일 핸들 에 연결 되 지 않 는 지 설정 하 는 데 사 용 됩 니 다.이 숫자 를 초과 하면 고립 된 연결 은 즉시 복원 되 고 경고 메 시 지 를 출력 합 니 다.이 규 제 는 단순 한 DoS 공격 을 막 기 위 한 것 일 뿐이다.이 제한 에 지나치게 의존 해 서 는 안 되 고, 심지어 인위적으로 이 수 치 를 줄 이 는 경우 가 더 많다. net.ipv4.tcp_max_syn_backlog 옵션 은 클 라 이언 트 로부터 확인 되 지 않 은 연결 요청 의 최대 값 을 기록 하 는 데 사 용 됩 니 다.128 MB 메모리 가 있 는 시스템 의 경우 이 매개 변수의 기본 값 은 1024 이 고 작은 메모리 의 시스템 은 128 입 니 다. net.ipv4.tcp_synack_retries 매개 변수의 값 은 커 널 이 연결 을 포기 하기 전에 SYN + ACK 패 키 지 를 보 내 는 수량 을 결정 합 니 다. net.ipv4.tcp_syn_retries 옵션 은 커 널 이 연결 을 포기 하기 전에 SYN 패 키 지 를 보 내 는 수량 을 표시 합 니 다. net.ipv4.tcp_fin_timeout 옵션 은 소켓 이 FIN - WAIT - 2 상태 로 유지 되 는 시간 을 결정 합 니 다.기본 값 은 60 초 입 니 다.이 값 을 정확하게 설정 하 는 것 은 매우 중요 합 니 다. 때로는 작은 웹 서버 를 부하 하 더 라 도 대량의 소켓 으로 인해 메모리 가 넘 칠 위험 이 발생 할 수 있 습 니 다. net.ipv4.tcp_keepalive_time 옵션 은 keepalive 가 활성화 되 었 을 때 TCP 가 keepalive 메 시 지 를 보 내 는 빈 도 를 표시 합 니 다.기본 값 은 2 (단 위 는 시간) 입 니 다.

좋은 웹페이지 즐겨찾기