Sobes.tech
Middle+

Եթե Nginx չի կարողանում կառավարել մեծ քանակությամբ միացումներ (ավելի քան 1024), ինչ করবেন?

sobes.tech AI

Պատասխան AI-ից

Կանխատեսում եմ ստուգել Nginx կոնֆիգուրացիան՝ worker_processes, worker_connections, multi_accept, use (epoll/kqueue) և keepalive_requests, keepalive_timeout պարամետրերը: Պահանջի դեպքում ավելացնելով։

Կառավարելու եմ համակարգի սահմանափակումները՝ ulimit -n Nginx գործընթացի համար։ Ավելացնելով նրանց համապատասխան արժեք։

Օպտիմալացնեմ Linux միջուկի ցանցային կարգավորումները՝ net.core.somaxconn, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_fin_timeout։

Վերլուծում եմ Nginx օրագրերը (error_log, access_log) սխալների կամ անոմալիաների համար։

Օգտագործում եմ մոնիտորինգի գործիքներ (nginx-status, top, vmstat, iostat, netdata, Prometheus/Grafana)՝ բեղմնավորության կետերը հայտնաբերելու համար (CPU, հիշողություն, սկավառակի, ցանցի):

Կարծում եմ, որ ավելի հզոր սարքավորումների կամ մասշտաբավորման հնարավորությունը՝ ավելացնելով լրացուցիչ Nginx ինստանցիաներ բաշխիչի հետևում:

Կանխատեսում եմ backend սերվերները՝ խնդիրը կարող է լինել ոչ Nginx-ում, այլ դիմումներում, որոնք մշակել են հարցումները:

# Ավելացնել worker գործընթացների քանակը
worker_processes auto;

# Ավելացնել մի worker-ի համար կապերի քանակը
events {
    worker_connections 65536;
    multi_accept on;
    use epoll; # Linux-ի համար
}

http {
    # Keep-alive կարգավորումներ
    keepalive_requests 10000;
    keepalive_timeout 65;

    # ... այլ կարգավորումներ
}
# Ստուգել ընթացիկ սահմանափակումը nginx օգտվողի համար
su - nginx -c 'ulimit -n'

# Ավելացնել սահմանափակումը limits.conf ֆայլում
# nginx - nofile 65536
# nginx - nproc 65536

# SSH սեսիայի կամ սերվերի վերագործարկում՝ limits.conf կիրառելու համար

# Ստուգել և փոփոխել միջուկի պարամետրերը
# Ամեն փոփոխություն պահանջում է 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