Nginx 구성 및 커널을 최적화하는 방법

WBOY
풀어 주다: 2023-05-16 21:43:27
앞으로
1305명이 탐색했습니다.

nginx 명령 최적화(구성 파일)

코드 복사 코드는 다음과 같습니다.

worker_processes 8;

  nginx 프로세스 수는 CPU 수에 따라 지정하는 것이 좋으며 일반적으로 그 배수입니다. .

코드 복사 코드는 다음과 같습니다.

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

CPU를 할당합니다. 위의 예에서 각 프로세스는 8개의 프로세스가 8개의 CPU에 할당됩니다. 물론 여러 프로세스를 작성할 수도 있습니다. 하나 할당 프로세스가 여러 CPU에 할당됩니다.

코드 복사 코드는 다음과 같습니다.

worker_rlimit_nofile 102400;

이 명령은 nginx 프로세스에서 열리는 최대 파일 설명자 수를 나타냅니다. 이론적 값은 열린 파일의 최대 수(ulimit -n)를 나눈 값이어야 합니다. 그러나 nginx는 요청을 균등하게 분배하지 않으므로 ulimit -n 값과 일관성을 유지하는 것이 가장 좋습니다.

코드 복사 코드는 다음과 같습니다.

epoll 사용;

epoll의 I/O 모델을 사용하면 당연합니다.

코드 복사 코드는 다음과 같습니다.

worker_connections 102400;

 프로세스당 허용되는 최대 연결 수는 이론적으로 nginx 서버당 최대 연결 수는 Worker_processes*worker_connections입니다.

코드 복사 코드는 다음과 같습니다:

keepalive_timeout 60;

 keepalive 시간 초과.

코드 복사는 다음과 같습니다.

client_header_buffer_size 4k;

 클라이언트 요청 헤더의 버퍼 크기는 시스템 페이징 크기에 따라 설정될 수 있습니다. 일반적으로 요청의 헤더 크기는 1k를 초과하지 않습니다. 그러나 일반 시스템 페이징은 1k보다 커야 하므로 페이징 크기는 여기에서 설정됩니다. 페이징 크기는 getconf pagesize 명령을 사용하여 얻을 수 있습니다.

코드 복사는 다음과 같습니다.

open_file_cache max=102400 inactive=20s;

 이것은 열린 파일에 대한 캐시를 지정합니다. 기본적으로는 활성화되지 않습니다. 열린 파일 수와 일치합니다. 비활성은 파일이 캐시 삭제를 요청하지 않은 이후의 시간을 의미합니다.

코드 복사 코드는 다음과 같습니다.

open_file_cache_valid 30s;

 캐시된 유효한 정보를 얼마나 자주 확인하는지를 나타냅니다.

코드 복사 코드는 다음과 같습니다.

open_file_cache_min_uses 1;

open_file_cache 명령어의 비활성 매개변수 시간 내 파일의 최소 사용 횟수를 초과하면 파일 설명자가 항상 캐시에 열려 있습니다. , 위의 예와 같이 파일이 비활성 시간 내에 사용되지 않으면 제거됩니다.

커널 매개변수 최적화

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_max_tw_buckets = 6000

 시간 대기 횟수, 기본값은 180000입니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.ip_local_port_range = 1024 65000

 시스템에서 열 수 있는 포트 범위입니다.

코드 복사 코드는 다음과 같습니다:

net.ipv4.tcp_tw_recycle = 1

 timewait 빠른 재활용을 활성화합니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_tw_reuse = 1

 재사용을 켭니다. 새로운 TCP 연결에 시간 대기 소켓을 재사용할 수 있도록 허용합니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_syncookies = 1

  syn 쿠키를 활성화하면 이를 처리할 수 있는 쿠키가 활성화됩니다.

코드 복사 코드는 다음과 같습니다:

net.core.somaxconn = 262144

웹 애플리케이션의 청취 기능 백로그는 기본적으로 커널 매개변수의 net.core.somaxconn을 128로 제한합니다. nginx에서 정의한 ngx_listen_backlog의 기본값은 511입니다. 따라서 이 값을 조정할 필요가 있습니다.

코드 복사 코드는 다음과 같습니다.

net.core.netdev_max_backlog = 262144

  각 네트워크 인터페이스가 커널이 이러한 패킷을 처리하는 것보다 더 빠르게 데이터 패킷을 수신할 때 대기열로 보낼 수 있는 최대 데이터 패킷 수입니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_max_orphans = 262144

 사용자 파일 핸들과 연결되지 않은 시스템의 최대 tcp 소켓 수입니다. 이 숫자를 초과하면 고아 연결이 즉시 재설정되고 경고 메시지가 인쇄됩니다. 이 제한은 단순한 DOS 공격을 방지하기 위한 것입니다. 너무 많이 의존하거나 인위적으로 이 값을 줄여야 합니다(메모리를 늘리는 경우).

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_max_syn_backlog = 262144

 아직 클라이언트 확인 정보를 받지 못한 기록된 연결 요청의 최대값입니다. 메모리가 128m인 시스템의 경우 기본값은 1024이고, 메모리가 작은 시스템의 경우 기본값은 128입니다.

코드 복사 코드는 다음과 같습니다:

net.ipv4.tcp_timestamps = 0

  타임스탬프는 시퀀스 번호 줄 바꿈을 방지할 수 있습니다. 1gbps 링크에서는 확실히 이전에 사용되었던 시퀀스 번호가 발생합니다. 타임스탬프를 사용하면 커널이 이러한 "비정상적인" 패킷을 허용할 수 있습니다. 여기서는 꺼야 합니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_synack_retries = 1

 Peer에 대한 연결을 열기 위해서는 커널이 syn을 보내고 이전 syn에 대한 응답으로 ack를 포함해야 합니다. 이른바 삼자악수 중 두 번째 악수다. 이 설정은 연결을 포기하기 전에 커널이 보내는 syn+ack 패킷 수를 결정합니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_syn_retries = 1

 커널이 연결 설정을 포기하기 전에 보낸 syn 패킷 수입니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_fin_timeout = 1

  로컬 엔드에서 소켓을 닫도록 요청하는 경우 이 매개변수는 핀-대기-2 상태를 유지하는 시간을 결정합니다. 피어는 오류를 범하고 연결을 닫지 않거나 예기치 않게 충돌할 수도 있습니다. 기본값은 60초입니다. 2.2 커널의 일반적인 값은 180초이며, 이 설정을 눌러도 되지만, 여러분의 머신이 로드가 가벼운 웹 서버라도 많은 수의 데드 소켓으로 인해 메모리 오버플로가 발생할 위험이 있다는 점을 명심하세요. wait-2는 최대 1.5k의 메모리만 사용할 수 있지만 수명이 더 길기 때문에 fin-wait-1보다 덜 위험합니다.

코드 복사 코드는 다음과 같습니다.

net.ipv4.tcp_keepalive_time = 30

  Keepalive가 활성화되면 TCP가 Keepalive 메시지를 보내는 빈도입니다. 기본값은 2시간입니다.

커널 최적화 구성 완료

코드 복사 코드는 다음과 같습니다.

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 42 9496 7296
net.ipv4. tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net. core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 32768 00
net.ipv4 .tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tc p_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

간단한 nginx 최적화 구성 파일

코드 복사 코드는 다음과 같습니다.

사용자 www www;
work er_processes 8 ;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
error_log /www/log/nginx_error.log crit;
pid / usr/local/nginx/nginx.pid
worker_rlimit_nofile 204800;

events
{
epoll 사용;
worker_connections 204800;
}

http
{
include mime.types;
default_type application/octet-stream;

charset utf-8;

server_names_hash_bucket_size 128;
cli ent_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;

파일 보내기;
tcp_nopush 켜기;

keepalive_timeout 60;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache 레벨=1:2
keys_zone=test:10m
in 활성=5분;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_buffer_size 16k;
fastcgi_buffers 16 16k;
fastcgi_busy_buffers_size 16k;
fastcgi_cache 테스트;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid 모든 1m;
fastcgi_cache_min_uses 1 ;
fastcgi_cache_use_stale 오류 시간 초과 valid_header http_500;

open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;



tcp_nodelay on;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0 ;
gzip_comp_level 2;
gzip_types text /plain application/x-javascript text/css application/xml;
gzip_vary on;


server
{
listen 8080;
server_name ad.test.com;
index index.php index .htm;
root /www/ html/;

location /status
{
stub_status on;
}

location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires 30d;
}

log_format 액세스 ' $remote_addr - $remote_user [$time_local ] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /www/log/access.log access;
}
}

fastcgi 명령에 대한 몇 가지 사항

코드 복사 코드는 다음과 같습니다.

fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=1:2key_zone=test:10m inactive=5m;

이 명령은 fastcgi 캐시 영역 저장 시간 및 비활성 삭제 시간에 대한 경로, 디렉터리 구조 수준 및 키워드입니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_connect_timeout 300;

백엔드 fastcgi에 연결하기 위한 시간 초과를 지정합니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_send_timeout 300;

 fastcgi에 요청을 보내는 시간 제한입니다. 이 값은 두 번의 핸드셰이크가 완료된 후 fastcgi에 요청을 보내는 시간 제한을 나타냅니다.

코드 복사:

fastcgi_read_timeout 300;

  fastcgi 응답 수신 시간 초과 이 값은 두 번의 핸드셰이크가 완료된 후 fastcgi 응답 수신 시간 초과를 나타냅니다.

코드 복사:

fastcgi_buffer_size 16k;

fastcgi 응답의 첫 번째 부분을 읽는 데 필요한 버퍼 크기를 지정합니다. 여기서는 fastcgi_buffers 명령으로 지정된 버퍼 크기로 설정할 수 있습니다. 위 명령은 응답의 첫 번째 부분, 즉 응답 헤더를 읽는 데 1개의 16k 버퍼를 사용하도록 지정합니다. 실제로 이 응답 헤더는 일반적으로 매우 작습니다(1k 이하). fastcgi_buffers 명령에 버퍼를 추가하면 캐싱을 위해 fastcgi_buffers에 의해 지정된 버퍼 크기도 할당됩니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_buffers 16 16k;

위와 같이 fastcgi 응답을 버퍼링하기 위해 로컬에서 필요한 버퍼 수와 크기를 지정합니다. PHP 스크립트에서 생성된 페이지 크기가 256k인 경우 캐싱을 위해 16개의 16k 버퍼를 할당합니다. 256k보다 큰 부분은 fastcgi_temp에 지정된 경로에 캐시됩니다. 물론 이는 서버 로드에 대한 현명하지 못한 솔루션입니다. 메모리의 처리 속도가 더 빠릅니다. 하드 디스크의 경우 일반적으로 이 값은 사이트의 PHP 스크립트에서 생성된 페이지 크기의 중간 값으로 설정되어야 합니다. 256k인 경우 이 값을 16 16k, 4 64k 또는 64 4k로 설정할 수 있지만 분명히 후자의 두 가지 방법은 좋은 설정 방법이 아닙니다. 생성된 페이지가 32k에 불과하고 4 64k를 사용하면 64k를 할당하기 때문입니다. 64개를 4k로 사용하면 8개의 4k 버퍼를 캐시에 할당하고, 16개 16k를 사용하면 2개의 16k 버퍼를 페이지 캐시에 할당하는 것이 더 합리적으로 보입니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_busy_buffers_size 32k;

이 명령의 용도는 모르겠지만 기본값은 fastcgi_buffers 크기의 두 배라는 것만 알고 있습니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_temp_file_write_size 32k;

 fastcgi_temp_path를 작성할 때 사용할 데이터 블록의 크기는 무엇입니까? 기본값은 fastcgi_buffers의 두 배입니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_cache test

 fastcgi 캐시를 켜고 이름을 지정합니다. 개인적으로 캐시를 켜는 것이 CPU 부하를 효과적으로 줄이고 502 오류를 방지할 수 있어 매우 유용하다고 생각합니다. 하지만 이 캐시는 동적 페이지를 캐시하기 때문에 많은 문제를 야기합니다. 구체적인 용도는 귀하의 필요에 따라 다릅니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

위의 예와 같이 캐시 200, 302 응답과 같이 지정된 응답 코드에 대한 캐시 시간을 지정합니다. 1시간 동안 30개의 1답글 캐시가 1일, 그렇지 않은 경우 1분.

코드 복사 코드는 다음과 같습니다.

fastcgi_cache_min_uses 1;

  fastcgi_cache_path 지시문의 비활성 매개변수 값 내에서 캐시의 최소 사용 횟수는 위의 예와 같이 파일이 한 번도 사용되지 않은 경우입니다. 5분이 지나면 이 파일은 제거됩니다.

코드 복사 코드는 다음과 같습니다.

fastcgi_cache_use_stale error timeout valid_header http_500;

이 매개변수의 기능을 모르겠습니다. 어떤 유형의 캐시가 쓸모 없는지 nginx에 알려야 할 것 같습니다. 위는 nginx의 fastcgi와 관련된 매개변수입니다. 또한 fastcgi 자체에도 최적화가 필요한 일부 구성이 있습니다. php-fpm을 사용하여 fastcgi를 관리하는 경우 구성 파일에서 다음 값을 수정할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

60

 동시에 처리되는 동시 요청 수, 즉 최대 60개의 하위가 열립니다. -동시 연결을 처리하는 스레드.

코드 복사 코드는 다음과 같습니다.

102400

 최대 열려 있는 파일 수입니다.

코드 복사 코드는 다음과 같습니다.

204800

 각 프로세스가 재설정되기 전에 수행할 수 있는 최대 요청 수입니다.

몇 가지 테스트 결과

 정적 페이지는 Squid에서 4w 동시성을 구성한 기사에 언급된 테스트 파일입니다. 아래 그림은 6개의 머신에서 동시에 webbench -c 30000 -t 600을 실행하는 모습입니다. http://ad .test .com:8080/index.html 명령 후 테스트 결과:

Nginx 구성 및 커널을 최적화하는 방법

netstat를 사용하여 필터링된 연결 수:

Nginx 구성 및 커널을 최적화하는 방법

상태의 php 페이지 결과(php 페이지가 phpinfo를 호출함):

Nginx 구성 및 커널을 최적화하는 방법

 netstat 필터링 후 PHP 페이지에 대한 연결 수:

Nginx 구성 및 커널을 최적화하는 방법

fastcgi 캐시를 사용하기 전 서버 로드:

Nginx 구성 및 커널을 최적화하는 방법

현재로서는 이미 PHP 페이지를 여는 것이 약간 어렵고 열려면 여러 번 새로 고침이 필요합니다. 위 그림에서 cpu0의 부하가 낮은 이유는 테스트 중 모든 네트워크 카드 인터럽트 요청이 cpu0에 할당되었고, nginx에서 7개의 프로세스가 열려 각각 cpu1-7에 할당되었기 때문입니다.

 fastcgi 캐시 사용 후:

Nginx 구성 및 커널을 최적화하는 방법

 이때, 쉽게 PHP 페이지를 열 수 있습니다.

 이 테스트는 어떤 데이터베이스에도 연결되지 않아 참고값이 없습니다. 다만, 위 테스트가 한계에 도달했는지는 모르겠지만, 메모리와 CPU 사용량에 따른 것은 아닌 것 같습니다. 내가 실행할 수 있는 기계.

위 내용은 Nginx 구성 및 커널을 최적화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!