고 유량 사이트 에 NGINX 와 PHP - fpm 설정 최적화

7489 단어 nginx
고 유량 사이트 에 NGINX 와 PHP - fpm 설정 을 최적화 하 는 방법 을 배 웁 니 다.
다음은 바로 이 방면 의 제시 와 건의 이다.
1. TCP 를 UNIX 도 메 인 소켓 으로 전환
UNIX 도 메 인 소켓 은 TCP 소켓 보다 loopback 인터페이스 에서 더 좋 은 성능 을 제공 합 니 다 (더 적은 데이터 복사 와 컨 텍스트 전환).
그러나 한 가지 명심 해 야 할 것 이 있 습 니 다. 같은 서버 에서 실행 되 는 프로그램 만 UNIX 도 메 인 소켓 에 접근 할 수 있 습 니 다. (네트워크 지원 이 없 는 것 이 분명 합 니 다.)
upstream backend
{
    # UNIX domain sockets
    server unix:/var/run/fastcgi.sock;

    # TCP sockets
    # server 127.0.0.1:8080;
}

2. 작업 프로 세 스 수 조정
현대 컴퓨터 하드웨어 는 다 중 프로세서 로 NGINX 는 다 중 물리 나 가상 프로 세 서 를 이용 할 수 있다.
대부분의 경우 웹 서버 는 다양한 작업 (예 를 들 어 웹 서버 로 서 서 비 스 를 제공 하 는 동시에 인쇄 서버) 을 처리 하기 위해 설정 되 지 않 습 니 다. NGINX 는 사용 가능 한 모든 프로 세 서 를 사용 하도록 설정 할 수 있 습 니 다. NGINX 작업 프로 세 스 는 다 중 스 레 드 가 아 닙 니 다.
다음 명령 을 실행 하면 기계 에 프로세서 가 몇 개 있 는 지 알 수 있 습 니 다.
Linux 에서 -
cat /proc/cpuinfo | grep processor

FreeBSD 에서 -
sysctl dev .cpu | grep location

nginx. conf 파일 에서 workprocesses 의 값 은 기계 의 프로세서 핵 수로 설정 되 어 있 습 니 다.
동시에, 증대 workerconnections (프로세서 의 핵심 마다 몇 개의 연결 을 처리 할 수 있 습 니까?) 의 값 과 "multi accept" 를 ON 으로 설정 합 니 다. Linux 를 사용한다 면 "epoll" 도 사용 합 니 다.
# We have 16 cores
worker_processes 16;

# connections per worker
events
{
    worker_connections 4096;
    multi_accept on;
}

3. upstream 부하 균형 설정
우리 의 경험 으로 볼 때 같은 기계 에 여러 개의 upstream 백 엔 드 가 하나의 upstream 백 엔 드 보다 더 높 은 스루풋 을 가 져 올 수 있다.
예 를 들 어 최대 1000 개의 PHP - fpm 하위 프로 세 스 (children) 를 지원 하려 면 이 숫자 를 두 개의 upstream 백 엔 드 에 평균 할당 하여 각각 500 개의 PHP - fpm 하위 프로 세 스 를 처리 할 수 있 습 니 다.
upstream backend {
    server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5;
    server unix:/var/run/php5-fpm.sock2 weight=100 max_fails=5 fail_timeout=5;
}

다음은 php - fpm. conf 에서 온 두 개의 프로 세 스 풀 입 니 다.
www1 /var/run/php5-fpm.sock1 -1 0666 www www static 500 50000 0 20s /var/log/php-slow.log no 5000 127.0.0.1 $HOSTNAME /usr/local/bin:/usr/bin:/bin /usr/tmp /usr/tmp /usr/tmp $OSTYPE $MACHTYPE 2
www2 /var/run/php5-fpm.sock2 -1 0666 www www static 500 50000 0 20s /var/log/php-slow.log no 5000 127.0.0.1 $HOSTNAME /usr/local/bin:/usr/bin:/bin /usr/tmp /usr/tmp /usr/tmp $OSTYPE $MACHTYPE 2

4. 로그 파일 에 접근 하지 않 기
이 점 은 고 유량 사이트 의 로그 파일 이 모든 스 레 드 간 에 동기 화 되 어야 하 는 IO 작업 과 관련 되 기 때문에 큰 영향 을 미친다.
access_log off;
log_not_found off;
error_log /var/log/nginx-error.log warn;

접근 로그 파일 을 닫 을 수 없다 면 버퍼 를 사용 해 야 합 니 다:
access_log /var/log/nginx/access.log main buffer=16k;

5. GZip 사용 하기
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

6. 자주 방문 하 는 파일 에 대한 캐 시 정보
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

7. 클 라 이언 트 시간 초과 조정
client_max_body_size 500M;
client_body_buffer_size 1m;
client_body_timeout 15;
client_header_timeout 15;
keepalive_timeout 2 2;
send_timeout 15;
sendfile on;
tcp_nopush on;
tcp_nodelay on;

8. 출력 버퍼 크기 조정
fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_connect_timeout 3s;
fastcgi_send_timeout 120s;
fastcgi_read_timeout 120s;
reset_timedout_connection on;
server_names_hash_bucket_size 100;

9. / etc / sysctl. conf 변조
# Recycle Zombie connections
net.inet.tcp.fast_finwait2_recycle=1
net.inet.tcp.maxtcptw=200000

# Increase number of files
kern.maxfiles=65535
kern.maxfilesperproc=16384

# Increase page share factor per process
vm.pmap.pv_entry_max=54272521
vm.pmap.shpgperproc=20000

# Increase number of connections
vfs.vmiodirenable=1
kern.ipc.somaxconn=3240000
net.inet.tcp.rfc1323=1
net.inet.tcp.delayed_ack=0
net.inet.tcp.restrict_rst=1
kern.ipc.maxsockbuf=2097152
kern.ipc.shmmax=268435456

# Host cache
net.inet.tcp.hostcache.hashsize=4096
net.inet.tcp.hostcache.cachelimit=131072
net.inet.tcp.hostcache.bucketlimit=120

# Increase number of ports
net.inet.ip.portrange.first=2000
net.inet.ip.portrange.last=100000
net.inet.ip.portrange.hifirst=2000
net.inet.ip.portrange.hilast=100000
kern.ipc.semvmx=131068

# Disable Ping-flood attacks
net.inet.tcp.msl=2000
net.inet.icmp.bmcastecho=1
net.inet.icmp.icmplim=1
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1

10. 모니터링
연결 을 여 는 수량, 남 은 메모리, 대기 상태 스 레 드 의 수 를 지속 적 으로 감시 합 니 다.
경 보 를 설정 하여 한도 값 을 초과 할 때 알려 드 립 니 다.이 경 보 를 직접 구축 하거나 ServerDensity 와 같은 것 을 사용 할 수 있 습 니 다.
NGINX 가 설 치 된 stub 확인status 모듈.이 모듈 은 기본적으로 NGINX 에 컴 파일 되 지 않 기 때문에 NGINX 를 다시 컴 파일 해 야 할 수도 있 습 니 다 -
./configure --with-http_ssl_module --with-http_stub_status_module --without-mail_pop3_module
--without-mail_imap_module --without-mail_smtp_module
make install BATCH=yes

좋은 웹페이지 즐겨찾기