Sobes.tech
Middle+

Ką darytumėte, jei Nginx nesugebėtų tvarkyti didelio skaičiaus ryšių (daugiau nei 1024)?

sobes.tech AI

Atsakymas iš AI

Aš patikrinsiu Nginx konfigūraciją: parametrus worker_processes, worker_connections, multi_accept, use (epoll/kqueue) ir keepalive_requests, keepalive_timeout. Jei reikės, padidinsiu juos.

Patikrinsiu sisteminius limitus: ulimit -n Nginx procesui. Juos padidinsiu iki atitinkamos vertės.

Optimizuosiu Linux branduolio nustatymus, susijusius su tinklu: net.core.somaxconn, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_fin_timeout.

Analizuosiu Nginx logus (error_log, access_log) dėl klaidų ar anomalijų.

Naudosiu stebėjimo įrankius (nginx-status, top, vmstat, iostat, netdata, Prometheus/Grafana), kad nustatyčiau našumo spragas (CPU, atmintis, diskas, tinklas).

Apsvarstysiu galimybę naudoti galingesnę įrangą arba mastelio keitimą (papildomų Nginx instancijų pridėjimą už balansavimo įrenginio).

Patikrinsiu backend serverius: galbūt problema ne Nginx, o programų, apdorojančių užklausas, pusėje.

# Darbo procesų skaičiaus didinimas
worker_processes auto;

# Kiekvieno darbo proceso jungčių skaičiaus didinimas
events {
    worker_connections 65536;
    multi_accept on;
    use epoll; # Linux
}

http {
    # Keep-alive nustatymai
    keepalive_requests 10000;
    keepalive_timeout 65;

    # ... kiti nustatymai
}
# Dabartinio limito patikrinimas naudotojui Nginx
su - nginx -c 'ulimit -n'

# Limito didinimas /etc/security/limits.conf faile
# nginx - nofile 65536
# nginx - nproc 65536

# SSH sesijos ar serverio perkrovimas limits.conf taikymui

# Branduolio parametrų patikrinimas ir keitimas
# Kiekvienas pakeitimas reikalauja vykdyti sysctl -p
# sysctl net.core.somaxconn
# sysctl -w net.core.somaxconn=65536

# sysctl net.ipv4.tcp_tw_reuse
# sysctl -w net.ipv4.tcp_tw_reuse=1

# sysctl net.ipv4.tcp_fin_timeout
# sysctl -w net.ipv4.tcp_fin_timeout=30