Sobes.tech
Middle+

თუ Nginx ვერ უმკლავდება დიდი რაოდენობის კავშირებს (მეტი 1024), რა გააკეთებდით?

sobes.tech AI

პასუხი AI-სგან

მე შემოწმებ ნიგსის კონფიგურაციას: პარამეტრები worker_processes, worker_connections, multi_accept, use (epoll/kqueue) და keepalive_requests, keepalive_timeout. მათ საჭიროების მიხედვით გავზრდი.

სისტემის ლიმიტებს შევამოწმებ: ulimit -n ნიგსის პროცესისთვის. მათ შესაბამისი მნიშვნელობით გავზრდი.

ლინუქსის კვანძის ოპტიმიზაციას გავაკეთებ, რომელიც დაკავშირებულია ქსელთან: net.core.somaxconn, net.ipv4.tcp_tw_reuse, net.ipv4.tcp_fin_timeout.

ნიგსის ლოგებს (error_log, access_log) გავაანალიზებ შეცდომებისა და ანომალიების გამოსავლენად.

მონიტორინგის ინსტრუმენტებს გამოვიყენებ (nginx-status, top, vmstat, iostat, netdata, Prometheus/Grafana) ბადების სიღრმის გასარკვევად (CPU, მეხსიერება, დისკი, ქსელი).

შესაძლებლობის განხილვა უფრო მძლავრი აღჭურვილობის ან მასშტაბირების (დამატებითი ნიგსის ინსტანციების დამატება ბალანსირებაზე) შესახებ.

შეამოწმებს ბექენდ-სერვერებს: შესაძლებელია პრობლემა არა ნიგსში, არამედ აპლიკაციების მხარეზე, რომლებიც ოპერირებენ მოთხოვნებს.

# სამუშაო პროცესების რაოდენობის გაზრდა
worker_processes auto;

# ერთ სამუშაოზე კავშირების რაოდენობის გაზრდა
events {
    worker_connections 65536;
    multi_accept on;
    use epoll; # Linux-ისთვის
}

http {
    # Keep-alive პარამეტრები
    keepalive_requests 10000;
    keepalive_timeout 65;

    # ... სხვა პარამეტრები
}
# მიმდინარე ლიმიტის შემოწმება ნიგსის მომხმარებლისთვის
su - nginx -c 'ulimit -n'

# ლიმიტის გაზრდა /etc/security/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