운영 및 유지보수 리눅스 운영 및 유지 관리 nginx 높은 동시성 구성 매개변수에 대한 자세한 설명

nginx 높은 동시성 구성 매개변수에 대한 자세한 설명

Aug 23, 2017 pm 03:25 PM
nginx 매개변수 구성

1. 일반적으로 nginx 구성 파일의 다음 항목은 최적화에 더 효과적입니다.

1.worker_processes 8;

nginx 프로세스 번호에 따라 지정하는 것이 좋습니다. 예를 들어 2A 쿼드 코어 CPU는 8개로 계산됩니다.

2.worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000;

위의 예에서는 8개의 프로세스가 8개의 CPU에 할당됩니다. 여러 개를 쓰거나 하나의
프로세스를 여러 CPU에 할당할 수 있습니다.

3.worker_rlimit_nofile65535;

이 명령은 nginx 프로세스에서 열린 최대 파일 설명자 수를 나타냅니다. 이론적인 값은 최대 열린 파일 수(ulimit -n)를 nginx 프로세스 수로 나눈 값입니다. nginx 할당 요청은 그다지 균일하지 않으므로 ulimit -n 값으로 일관성을 유지하는 것이 좋습니다.

이제 Linux 2.6 커널에서 열려 있는 파일 수는 65535이고 이에 따라 Worker_rlimit_nofile은 65535로 채워져야 합니다.


이것은 nginx 스케줄링 시 프로세스에 대한 요청 할당이 균형이 맞지 않기 때문이므로 10240을 입력하고 총 동시성이 30,000~40,000에 도달하면 프로세스 수가 10240을 초과할 수 있으며 502 오류가 반환됩니다.

Linux 시스템 파일 설명자를 보는 방법:

[root@web001 ~]# sysctl -a | grep fs.file

fs.file-max = 789972

fs.file-nr = 510 0 789972

4 . useepoll;

epoll의 I/O 모델 사용

(

추가 설명:

apache와 유사하게 nginx는 운영 체제마다 다른 이벤트 모델을 갖습니다.

A) 표준 이벤트 모델

선택, Poll은 표준 이벤트에 속합니다. 모델 현재 시스템에 더 효율적인 방법이 없으면 nginx는 선택 또는 폴링을 선택합니다. B) 효율적인 이벤트 모델 Kqueue: FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 및 MacOS X에서 사용됩니다. kqueue를 사용하는 프로세서는 커널 패닉을 일으킬 수 있습니다.
Epoll: Linux 커널 버전 2.6 이상이 설치된 시스템에서 사용됩니다.



/dev/poll: Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 및 Tru64 UNIX 5.1A+에서 사용됩니다.

이벤트 포트: Solaris 10에서 사용됩니다. 커널 충돌을 방지하려면 보안 패치를 설치해야 합니다.

)

5.worker_connections65535;

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

6. keepalive_timeout60;

keepalive 시간 초과.

7.client_header_buffer_size4k;

클라이언트 요청 헤더의 버퍼 크기입니다. 이는 시스템 페이징 크기에 따라 설정될 수 있습니다. 일반적으로 요청 헤더의 크기는 1k를 초과하지 않지만 일반 시스템 페이징은 다음보다 큽니다. 1k, 여기서는 페이징 크기로 설정되었습니다.

페이징 크기는 getconf PAGESIZE 명령을 사용하여 얻을 수 있습니다.

[root@web001 ~]# getconf PAGESIZE

4096

그러나 client_header_buffer_size가 4k를 초과하는 경우도 있지만 client_header_buffer_size 값은 "시스템 페이징 크기"의 정수배로 설정되어야 합니다.

8. Open_file_cachemax=65535 inactive=60s;

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

9.open_file_cache_valid80s;

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

10.open_file_cache_min_uses1;

open_file_cache 명령의 비활성 매개변수 동안 파일의 최소 사용 횟수가 초과되면 위의 예와 같이 파일 설명자가 항상 캐시에 열립니다. 비활성 시간에 한 번 파일을 사용하지 않으면 제거됩니다.

2. 커널 매개변수 최적화 관련:

net.ipv4.tcp_max_tw_buckets = 6000

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

net.ipv4.ip_local_port_range = 1024 65000

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

net.ipv4.tcp_tw_recycle = 1

시간 대기 빠른 재활용을 활성화합니다.

net.ipv4.tcp_tw_reuse = 1

재사용을 활성화합니다. 새로운 TCP 연결에 TIME-WAIT 소켓을 재사용할 수 있습니다.

net.ipv4.tcp_syncookies = 1

SYN 쿠키를 활성화합니다. 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

피어에 대한 연결을 열려면 커널은 이전 SYN에 대한 응답으로 ACK와 함께 SYN을 보내야 합니다. 이른바 삼자악수 중 두 번째 악수다. 이 설정은 연결을 포기하기 전에 커널이 보내는 SYN+ACK 패킷 수를 결정합니다.

net.ipv4.tcp_syn_retries = 1

커널이 연결 설정을 포기하기 전에 전송된 SYN 패킷 수입니다.

net.ipv4.tcp_fin_timeout = 1

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

net.ipv4.tcp_keepalive_time = 30

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

3. 전체 커널 최적화 설정은 아래에 게시되어 있습니다:

vi /etc/sysctl.conf CentOS5.5에서는 모든 내용을 지우고 다음 내용으로 직접 대체할 수 있습니다:

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 = 4294967296
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.w mem_max = 16777216
net.core.netdev_max_backlog = 262144
net .core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
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.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

use 구성을 즉시 적용하려면 다음 명령을 사용할 수 있습니다:
/sbin/sysctl -p

4. 다음은 시스템 연결 수 최적화에 관한 것입니다.

열린 파일의 기본값과 Linux의 최대 사용자 프로세스는 1024

#ulimit -n

1024

#ulimit –u

1024

문제 설명: 설명 서버는 동시에 1024개의 파일만 열 수 있도록 허용하고 1024개의 사용자 프로세스를 처리합니다

현재 시스템의 모든 제한 값을 보려면 ulimit -a를 사용하고, 현재 열린 파일의 최대 수를 보려면 ulimit -n을 사용하십시오.

새로 설치된 Linux에는 기본적으로 1024만 있습니다. 로드가 많은 서버로 사용하면 열려 있는 파일이 너무 많습니다. 따라서 더 크게 만들어야 합니다.

해결 방법:

ulimit –n 65535를 사용하여 즉시 수정하지만 다시 시작한 후에는 유효하지 않습니다. (ulimit -SHn 65535는 ulimit-n 65535와 동일하며 -S는 소프트, -H는 하드를 나타냅니다.)

세 가지 수정 방법이 있습니다.

1 /에 ulimit -SHn 65535 행을 추가합니다. etc/rc.local
2 /etc/profile
3에 ulimit -SHn 65535 줄을 추가합니다. /etc/security/limits.conf 끝에 추가합니다:

* Soft nofile 65535
* hard nofile 65535
* Soft nproc 65535
* hard nproc 65535

어떤 방법을 구체적으로 사용해야 할까요? 첫 번째 방법은 CentOS에서는 효과가 없고, 세 번째 방법은 효과가 있으며, 두 번째 방법은 Debian에서 효과가 있습니다

# ulimit -n

65535

# ulimit -u

65535

참고: ulimit 명령 자체에는 소프트 및 하드 설정이 있습니다. 하드에 -H를 추가하고 소프트에 -S를 추가합니다. 기본 표시는 소프트 제한입니다

소프트 제한을 나타냅니다. 현재 시스템 값에 적용되는 설정입니다. 하드 제한 값은 일반 사용자가 낮출 수 있습니다. 그러나 늘릴 수는 없습니다. 소프트 제한은 하드 제한보다 높게 설정할 수 없습니다. 루트 사용자만 하드 제한 값을 늘릴 수 있습니다.

5 다음은 간단한 nginx 구성 파일입니다.

사용자 www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000
01000000;
error_log /www/log/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;
이벤트
{
epoll 사용;
worker_connections 204800;
}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2 k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache TEST;
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_headerhttp_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 텍스트/일반 애플리케이션/x -javascript text/cssapplication/xml;
gzip_vary on;
server
{
listen 8080;
server_name backup.aiju.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)$
{
30일 만료;
}
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 /us r/로컬 /nginx/fastcgi_cache 레벨=1:2keys_zone=TEST:10minactive=5m;

这个指令为FastCGI 缓存指定一个路径,目录结构等级字,关键区域存储时间와비活动删除时间。

fastcgi_connect_timeout 300;

指정连接到后端FastCGI 的超时时间。

fastcgi_send_timeout 300;

向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间。

fastcgi_read_timeout 300;

接收FastCGI는 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI는 应答的超时时间。

fastcgi_buffer_size 4k;

指定读取FastCGI应答第一分需要는 더 큰 규모의 缓冲区, 一般第一分分应答不会를 사용합니다.超过1k,由于页면大小为4k,所以这里设置为4k。

fastcgi_buffers 8 4k;

指定本地需要 용도에 더 많은 缓冲区来缓冲FastCGI的应答。

fastcgi_busy_buffers_size 8k;

这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers 의 两倍。

fastcgi_temp_file_write_size 8k;

현재 写入fastcgi_temp_path 时将用多大数据块,默认值是fastcgi_buffers 的两倍。

fastcgi_cache TEST

开启FastCGI 缓存并且为其 제조사는 个人感觉开启缓存不常有,可以有效降低CPU 负载,并且防止502 错误。

fastcgi_cache_valid 200 302 1시간;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid 모든 1분;

为指정적应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。

fastcgi_cache_min_uses 1;

缓存재fastcgi_cache_path가 비활성 상태입니다.如上例,如果는 5분 단위로 1次也没有被使用,那么这个文件将被移除。

fastcgi_cache_use_stale error timeout valid_headerhttp_500;

不知道这个参数의 작품, 猜想应该是让nginx 知道哪些类型의缓存是没사용용.以上为nginx 中FastCGI상关参数,另외,FastCGI 자체가 一些配置需要进行优化,如果你使사용php-fpm来管리FastCGI,可以修改配置文件中的以下值:

同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接。

102400

最多打开文件数。

204800

每个进程十置の前能够执行的最多请求数。🎜

위 내용은 nginx 높은 동시성 구성 매개변수에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

nginx가 시작되었는지 확인하는 방법 nginx가 시작되었는지 확인하는 방법 Apr 14, 2025 pm 01:03 PM

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

Nginx에서 클라우드 서버 도메인 이름을 구성하는 방법 Nginx에서 클라우드 서버 도메인 이름을 구성하는 방법 Apr 14, 2025 pm 12:18 PM

클라우드 서버에서 nginx 도메인 이름을 구성하는 방법 : 클라우드 서버의 공개 IP 주소를 가리키는 레코드를 만듭니다. Nginx 구성 파일에 가상 호스트 블록을 추가하여 청취 포트, 도메인 이름 및 웹 사이트 루트 디렉토리를 지정합니다. Nginx를 다시 시작하여 변경 사항을 적용하십시오. 도메인 이름 테스트 구성에 액세스하십시오. 기타 참고 : HTTPS를 활성화하려면 SSL 인증서를 설치하고 방화벽에서 포트 80 트래픽을 허용하고 DNS 해상도가 적용되기를 기다립니다.

nginx 버전을 확인하는 방법 nginx 버전을 확인하는 방법 Apr 14, 2025 am 11:57 AM

nginx 버전을 쿼리 할 수있는 메소드는 다음과 같습니다. nginx -v 명령을 사용하십시오. nginx.conf 파일에서 버전 지시문을 봅니다. nginx 오류 페이지를 열고 페이지 제목을 봅니다.

Docker 컨테이너의 이름을 확인하는 방법 Docker 컨테이너의 이름을 확인하는 방법 Apr 15, 2025 pm 12:21 PM

단계를 따르면 Docker 컨테이너 이름을 쿼리 할 수 ​​있습니다. 모든 컨테이너 (Docker PS)를 나열하십시오. 컨테이너 목록을 필터링합니다 (GREP 명령 사용). 컨테이너 이름 ( "이름"열에 위치)을 가져옵니다.

Windows에서 nginx를 구성하는 방법 Windows에서 nginx를 구성하는 방법 Apr 14, 2025 pm 12:57 PM

Windows에서 Nginx를 구성하는 방법은 무엇입니까? nginx를 설치하고 가상 호스트 구성을 만듭니다. 기본 구성 파일을 수정하고 가상 호스트 구성을 포함하십시오. 시작 또는 새로 고침 Nginx. 구성을 테스트하고 웹 사이트를보십시오. SSL을 선택적으로 활성화하고 SSL 인증서를 구성하십시오. 포트 80 및 443 트래픽을 허용하도록 방화벽을 선택적으로 설정하십시오.

nginx 서버를 시작하는 방법 nginx 서버를 시작하는 방법 Apr 14, 2025 pm 12:27 PM

Nginx 서버를 시작하려면 다른 운영 체제에 따라 다른 단계가 필요합니다. Linux/Unix System : Nginx 패키지 설치 (예 : APT-Get 또는 Yum 사용). SystemCTL을 사용하여 nginx 서비스를 시작하십시오 (예 : Sudo SystemCtl start nginx). Windows 시스템 : Windows 바이너리 파일을 다운로드하여 설치합니다. nginx.exe 실행 파일을 사용하여 nginx를 시작하십시오 (예 : nginx.exe -c conf \ nginx.conf). 어떤 운영 체제를 사용하든 서버 IP에 액세스 할 수 있습니다.

Docker 용 컨테이너를 만드는 방법 Docker 용 컨테이너를 만드는 방법 Apr 15, 2025 pm 12:18 PM

Docker에서 컨테이너 만들기 : 1. 이미지를 당기기 : Docker Pull [Mirror Name] 2. 컨테이너 만들기 : Docker Run [옵션] [미러 이름] [명령] 3. 컨테이너 시작 : Docker Start [컨테이너 이름]

Docker가 컨테이너를 시작하는 방법 Docker가 컨테이너를 시작하는 방법 Apr 15, 2025 pm 12:27 PM

Docker Container Startup 단계 : 컨테이너 이미지를 당기기 : "Docker Pull [Mirror Name]"을 실행하십시오. 컨테이너 생성 : "docker"[옵션] [미러 이름] [명령 및 매개 변수]를 사용하십시오. 컨테이너를 시작하십시오 : "Docker start [컨테이너 이름 또는 ID]"를 실행하십시오. 컨테이너 상태 확인 : 컨테이너가 "Docker PS"로 실행 중인지 확인하십시오.

See all articles