Sobes.tech
Middle+

Mida teeksite, kui Nginx ei suuda toime tulla suure ühenduste arvuga (üle 1024)?

sobes.tech AI

Vastus AI-lt

Ma kontrollin Nginx konfiguratsiooni: parameetreid worker_processes, worker_connections, multi_accept, use (epoll/kqueue) ning keepalive_requests, keepalive_timeout. Vajadusel suurendan neid.

Kontrollin süsteemi limiite: ulimit -n Nginx protsessile. Suurendan need vastavalt vajadusele.

Optimeerin Linuxi kerneli seadeid, mis on seotud võrguga: net.core.somaxconn, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_fin_timeout.

Analüüsin Nginx logisid (error_log, access_log) vigade või anomaaliate leidmiseks.

Kasutan jälgimisvahendeid (nginx-status, top, vmstat, iostat, netdata, Prometheus/Grafana), et tuvastada kitsaskohti (CPU, mälu, ketas, võrk).

Võimalusel kaalun võimsama riistvara kasutuselevõttu või skaleerimist (täiendavate Nginx instantside lisamine tasakaalustaja taga).

Kontrollin backend-serverid: võimalik, et probleem ei ole Nginxis, vaid rakenduste poolel, mis töötlevad päringuid.

# Töötavate protsesside arvu suurendamine
worker_processes auto;

# Ühe töötaja ühenduste arvu suurendamine
events {
    worker_connections 65536;
    multi_accept on;
    use epoll; # Linux
}

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

    # ... muud seaded
}
# Praeguse limiidi kontroll kasutaja Nginx jaoks
su - nginx -c 'ulimit -n'

# Limiidi suurendamine /etc/security/limits.conf failis
# nginx - nofile 65536
# nginx - nproc 65536

# SSH sessiooni või serveri taaskäivitamine limits.conf rakendamiseks

# Kerneli seadete kontroll ja muutmine
# Iga muudatus nõuab käsku 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