Nginx 성능 최적화

10398 단어
Nginx 성능 최 적 화 는 운영 체제 에 대한 최적화 와 팀 Nginx 자체 의 최적화 두 부분 으로 나 눌 수 있다.
리 눅 스 시스템 최적화
1. 불필요 한 서 비 스 를 닫 고 자신의 Linux 서버 에 배 치 된 프로젝트 수요 에 따라 불필요 한 서비스 나 프로 세 스 를 닫 습 니 다.
2. 디스크 쓰기 작업 을 최적화 합 니 다. Nginx 가 한 파일 에 접근 할 때마다 리 눅 스 시스템 은 그의 'Access', 즉 방문 시간 을 수정 하여 파일 이 수 정 된 시간 을 볼 때 stat 방식 으로 볼 수 있 습 니 다. 예 를 들 어:
[root@iZ94sni08orZ conf]# stat nginx.conf 
  File: "nginx.conf"
  Size: 2656        Blocks: 8          IO Block: 4096       
Device: ca01h/51713d    Inode: 660555      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/ UNKNOWN)   Gid: ( 1001/ UNKNOWN)
Access: 2015-11-18 16:31:05.221629056 +0800
Modify: 2015-04-21 22:11:59.000000000 +0800
Change: 2015-11-18 10:30:10.421498579 +0800
[root@iZ94sni08orZ conf]# 

접근 시간 이 표시 되 어 있 기 때문에 동시 다발 적 인 접근 시스템 에서 이 디스크 쓰기 작업 이 시스템 에 미 치 는 영향 이 매우 크기 때문에 이 기능 을 닫 아야 합 니 다.
/dev/sdb1  /dataext3  defaults 0  0 

다음 설정 으로 변경:
/dev/sdb1  /dataext3  defaults,noatime,nodiratime  0  0 

그리고 시스템 을 다시 시작 하여 효력 을 발생 시킨다.
시스템 을 다시 시작 하지 않 으 면 remount 옵션 을 사용 하여 다시 마 운 트 할 수 있 습 니 다.
-->mount -o defaults,noatime,nodiratime -o remount /dev/sdb1 /sdb
-->mount | grep sdb1

/dev/sdb1  on  /sdb   type ext3 (rw,noatime,nodiratime)

단독 마 운 트 된 파 티 션 이나 디스크 라면 명령 을 직접 실행 할 수 있 습 니 다.
-->mount -o defaults,noatime,nodiratime /dev/sdb1 /sdb
-->mount | grep sdb1

/dev/sdb1  on  /sdb   type ext3 (rw,noatime,nodiratime)

3. 자원 제한 Linux 를 최적화 하 는 명령 은 ulimit 입 니 다. 셸 프로그램의 자원 을 제어 하 는 데 사용 되 고 셸 시작 프로 세 스 가 사용 하 는 자원 에 사용 되 며 문법 은 다음 과 같 습 니 다.
ulimit [-aHS][-c <core    >][-d <      >][-f <    >][-m <    >][-n <    >][-p <     >][-s <    >][-t <CPU  >][-u <    >][-v <      >]

매개 변 수 는:
   -a             。    -c <core    >    core      ,     。    -d <      >            ,   KB   -f <    >  shell         ,     。    -H           ,            。    -m <    >            ,   KB   -n <    >                 。    -p <     >            ,  512   -s <    >         ,   KB   -S           。    -t <CPU  >    CPU       ,    。    -u <    >              。    -v <      >              ,   KB

매개 변수의 기능 에 따라 ulimit -a 자원 의 제한 정 보 를 열거 할 수 있 습 니 다.
[root@iZ94sni08orZ ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3870
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3870
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[root@iZ94sni08orZ ~]# 

위의 그림 은 제 CentOS 7.0 의 정보 입 니 다. 그리고 명령 을 사용 하여 시스템 을 Nginx 에 최적화 시 킵 니 다. 아래 명령 으로 - n 에 대응 하 는 자원 에 대해 무제 한 을 할 수 있 습 니 다. 즉, 시스템 이 지원 하 는 가장 큰 값 입 니 다. ulimit -n unlimited 또는 ulimit -n 으로 수정 할 수 있 습 니 다.
설정 파일 을 수정 하 는 방식 으로 도 수정 할 수 있 습 니 다.
vim /etc/security/limits.conf

이 파일 은 두 줄 만 있 고 나머지 는 주석 내용 입 니 다.
* soft nofile 65535
* hard nofile 65535

다음 으로 변경:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

상술 한 수정 후 필요 한 요 리 를 다시 시작 해 야 할 뿐 효력 이 발생 한다.
4. 커 널 TCP 옵션 최적화
커 널 파 라 메 터 를 수정 하 십시오. 이 파일 은 /etc/sysctl.conf 에 있 습 니 다. 내용 설명 을 포함 하여 모두 알 수 있 습 니 다. 기본 내용 은:
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536
# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.lo.arp_announce=2

대응 하 는 속성 을 다음 값 으로 설정 합 니 다. 수정 사항 도 있 고 없 는 것 도 추가 합 니 다.
net.ipv4.tcp_max_tw_buckets = 6000 #  timewait  ,   180000
net.ipv4.ip_local_port_range = 1024 65000 #              ,   32768-61000
net.ipv4.tcp_tw_recycle = 1 #      timewait    ,   0
net.ipv4.tcp_tw_reuse = 1 #          ,   TIME-WAIT sockets      TCP  
net.ipv4.tcp_syncookies = 1 #      SYN Cookies,    ,  SYN       ,   Cookies  ,   0

net.core_somaxconn = 262144 #
net.core_netdev_max_backlog = 262144 #                  ,                        ,         ,                

net.ipv4.tcp_max_orphans = 262144 #  Linux                 ,       
net.ipv4.tcp_max_syn_backlog = 262144 #                        
net.ipv4.tcp_timestamps = 0 #          ,   0       
net.ipv4.tcp_synack_retries = 1 #  SYN     ,   5, TCP            ,              SYN ACK SYN,   wile       ,     SYN   。            DDos  

net.ipv4.tcp_syn_retries = 1 #              SYN    
net.ipv4.tcp_fin_timeout = 1 #     FIN-WAIT-2     
net.ipv4.tcp_keepalive_time = 30 #       ,       TCP  keepalive     

Nginx 서버 최적화
1. 방문 로 그 를 닫 고 필요 에 따라 해당 모듈 의 로그 기록 을 합 니 다. 예 를 들 어 http, server, location 등 단독 구간 에서 로그 기록 을 설정 합 니 다.
2. Nginx 서버 설정 최적화
server 모듈 설정 파일 에 설정:
worker_connections 65535
keepalive_timeout 60
client_header_buffer_size 8k
worker_rlimit_nofile 65535

물론 Nginx 에 대한 최적화 도 많 습 니 다. 위 에 간단 한 학습 기록 이 있 으 니 여러분 께 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기