Configurația implicită livrată de distribuțiile Linux (Ubuntu/Debian) pentru Nginx este concepută pentru a rula pe servere modeste cu resurse minime. Pentru un server dedicat de producție (cu 8, 16 sau 32 de nuclee CPU) care procesează mii de cereri concurente pe secundă, setările implicite provoacă blocaje artificiale: epuizarea descriptorilor de fișiere („Too many open files”), căderi de conexiuni și latențe nejustificate.
# Rulăm ca utilizator de sistem neprivilegiat:
user www-data;
# Detectează automat numărul de nuclee CPU fizice și pornește exact atâția workers:
worker_processes auto;
# Ancorează fiecare proces worker la un nucleu dedicat (previne comutarea de context CPU și pierderea cache-ului L1/L2):
worker_cpu_affinity auto;
# Ridică limita numărului de fișiere și socket-uri deschise simultan de procesele Nginx:
worker_rlimit_nofile 65535;
events {
# Numărul maxim de conexiuni simultane per worker (8 workers * 8192 = ~65.000 conexiuni concurente!):
worker_connections 8192;
# Instruiește worker-ul să accepte toate conexiunile noi dintr-o singură trecere, nu una câte una:
multi_accept on;
# Mecanismul de I/O asincron de mare viteză specific nucleului Linux:
use epoll;
}
http {
# 1. OPTIMIZARE TRANSFER DATE ZERO-COPY:
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 2. GESTIUNE CONEXIUNI PERSISTENTE (KEEPALIVE):
keepalive_timeout 65;
keepalive_requests 1000;
# 3. MEMORAREA DESCRIPTORILOR DE FIȘIERE ÎN RAM:
open_file_cache max=50000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# 4. REGLAREA BUFFERELOR PENTRU REDUCEREA SCRIERILOR PE DISC:
client_body_buffer_size 128k;
client_max_body_size 50m;
client_header_buffer_size 4k;
large_client_header_buffers 4 16k;
# 5. TIMEOUT-URI STRICTE PENTRU ELIBERAREA CONEXIUNILOR BLOCATE:
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;
}
Parametrii de Kernel Linux (sysctl) Obligatorii
Performanța Nginx nu poate depăși limitele impuse de stiva TCP/IP a sistemului de operare. Adăugați în /etc/sysctl.d/99-nginx.conf și rulați sudo sysctl -p:
# Mărește coada de conexiuni în așteptare pentru portul de ascultare:
net.core.somaxconn = 65535
# Mărește coada pachetelor de rețea neprocesate:
net.core.netdev_max_backlog = 65535
# Ridică limita globală de descriptori de fișiere pe server:
fs.file-max = 2097152
# Permite reutilizarea rapidă a socket-urilor în starea TIME_WAIT:
net.ipv4.tcp_tw_reuse = 1
Întrebări & Exemple de Cod:
Ghid de Tuning de Performanță Nginx: worker_processes, epoll, open_file_cache și Reducerea LatențeiAi o nelămurire despre utilizarea comenzii
Ghid de Tuning de Performanță Nginx: worker_processes, epoll, open_file_cache și Reducerea Latențeisau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.