高并發(fā)場(chǎng)景下,如何提升Nginx并發(fā)性能?
Nginx是大型架構(gòu)的必備中間件,也是高并發(fā)的核心組件,下面我就重點(diǎn)詳解“5大提升Nginx并發(fā)性能方案”@mikechen
Nginx高并發(fā)
Nginx 是目前全球最流行的 Web 服務(wù)器之一,其廣泛使用得益于其卓越的性能。
Nginx 采用一個(gè)主進(jìn)程(Master),管理多個(gè)工作進(jìn)程(Worker)的架構(gòu)。
每個(gè)工作進(jìn)程通過一個(gè)事件循環(huán)處理所有活躍連接,僅在有事件觸發(fā)時(shí)執(zhí)行回調(diào),避免阻塞。
與其他傳統(tǒng)的 Web 服務(wù)器相比,Nginx 在處理大量并發(fā)請(qǐng)求時(shí),能夠在有限的硬件資源下提供更穩(wěn)定的服務(wù)。
即使在處理大量并發(fā)連接時(shí),Nginx 對(duì)系統(tǒng)資源(CPU 和內(nèi)存)的占用也更低。
Nginx高并發(fā)優(yōu)化
即便Nginx可以更好的支撐并發(fā),但在 Nginx 高并發(fā)性能中,以下 5 大核心參數(shù)依然是最關(guān)鍵的優(yōu)化項(xiàng)。
worker_processes
worker_processes 是 Nginx 中一個(gè)非常重要的配置參數(shù),它用于設(shè)置 Nginx 工作進(jìn)程的數(shù)量。
最新文章
可以使用 auto 關(guān)鍵字,讓 Nginx 自動(dòng)檢測(cè) CPU 核心數(shù)并進(jìn)行配置:
worker_processes auto;
events {
worker_connections 1024;
}
如果你對(duì)服務(wù)器的負(fù)載情況有更精確的了解,也可以手動(dòng)指定 worker_processes 的值。
最新文章
例如:如果服務(wù)器有 4 個(gè) CPU 核心,可以將 worker_processes 設(shè)置為 4:
worker_processes 4;
events {
worker_connections 1024;
}
比如:中型服務(wù)器配置:
- CPU核心數(shù):8;
- 內(nèi)存:16GB;
- Nginx配置;
worker_processes 8;
events {
worker_connections 16384;
multi_accept on;
use epoll;
}
worker_connections
worker_connections 指令,用于設(shè)置每個(gè)工作進(jìn)程可以處理的“最大連接數(shù)”。
最新文章
默認(rèn)值為 1024,通常需要根據(jù)系統(tǒng)資源增加此值。
worker_processes 4;
events {
worker_connections 1024;
}
http {
# 其他 HTTP 相關(guān)配置
server {
listen 80;
server_name mikechen.cc;
location / {
root /var/www/html;
index index.html;
}
}
}
理論上最大連接數(shù) = worker_processes * worker_connections。
可以根據(jù)服務(wù)器的硬件資源,比如:(CPU、內(nèi)存、網(wǎng)絡(luò)帶寬…),調(diào)整 worker_connections。
推薦值:通常設(shè)置為 幾千到幾萬,具體取決于服務(wù)器能力。
比如:
- 小型服務(wù)器:4096 ~ 8192;
- 中型服務(wù)器:16384 ~ 32768;
- 大型服務(wù)器:65536 或更高。
events {
worker_connections 65535;
}
備注:這里同時(shí)需要,調(diào)整系統(tǒng)的文件描述符限制(通過修改 /etc/security/limits.conf 和 ulimit 命令)。
ulimit -n
Nginx 提供了一個(gè)指令 worker_rlimit_nofile,用于設(shè)置每個(gè) worker 進(jìn)程的最大文件描述符限制:
worker_rlimit_nofile 65535; # 設(shè)置每個(gè) worker 的文件描述符限制
worker_processes auto;
events {
worker_connections 16384;
}
keepalive_timeout
HTTP 長連接的超時(shí)時(shí)間,主要是:控制客戶端、與服務(wù)器之間保持連接的時(shí)間,減少重復(fù)建立連接的開銷。
最新文章
一般,設(shè)置合理的超時(shí)時(shí)間(如 60 秒),避免過長導(dǎo)致無效連接占用資源。
keepalive_timeout 60;
在高并發(fā)場(chǎng)景下,建議將 keepalive_timeout 設(shè)置為較短的時(shí)間(如 30 秒),以避免空閑連接占用過多資源:
keepalive_timeout 30;
gzip
啟用 Gzip 壓縮,可以減少傳輸數(shù)據(jù)量,提高并發(fā)處理能力
比如:通過壓縮響應(yīng)數(shù)據(jù)(如 HTML、CSS、JavaScript),減少傳輸?shù)臄?shù)據(jù)量,提高帶寬利用率。
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript text/css application/xml;
緩存配置
緩存打開的文件句柄,可以減少頻繁打開文件的操作,提高靜態(tài)資源的訪問速度。
最新文章
open_file_cache max=10000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
以及,通過緩存靜態(tài)文件,減少對(duì)后端服務(wù)器的請(qǐng)求:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control public;
}
通過以上配置,可以有效提升 Nginx 在高并發(fā)場(chǎng)景下的性能表現(xiàn)。