Sobes.tech
Middle+

Šta biste uradili ako Nginx ne može da se nosi sa velikim brojem konekcija (više od 1024)?

sobes.tech АИ

Одговор од АИ

Проверитћу конфигурацију 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) за идентификовање уских грла (ЦПУ, меморија, диск, мрежа).

Размислићу о могућности коришћења моћније опреме или скалирања (додавање додатних Nginx инстанци иза балансера).

Проверитћу бекенд сервере: могуће је проблем не у 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'

# Повећање лимита у датотеци /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