Назад | Перейти на главную страницу

Запуск 1000 подключений в секунду с ядром dotnet на ubuntu через ngnix

Мне нужно настроить сервер с высоким трафиком. Сейчас у меня около 700 подключений в секунду. У меня есть приложение dotnet, которое работает через ngnix на ubuntu 16.04. Я установил env с помощью этот документация.

Во время тестирования все прошло отлично, но после направления трафика на сервер я увидел, что все запросы получали ошибку 449.

Заглянув в error.log, я увидел эту ошибку:

worker_connections are not enough

Итак, я отредактировал /etc/nginx/nginx.conf как это:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
worker_rlimit_nofile 300000;

include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 150000;
        #multi_accept on;
}

После изменения этого я получил Too many open files ошибка. Я последовал за этот решение.

В /proc/sys/fs/file-max Ставил 65536. В /etc/sysctl.conf Я установил: fs.file-max = 65536. В /etc/security/limits.conf Я установил:

* soft     nproc          65535
* hard     nproc          65535
* soft     nofile         65535
* hard     nofile         65535

В /etc/nginx/conf.d/default.conf Устанавливаю так: server {listen 80; имя_сервера hostname.com;

proxy_buffering off;
proxy_read_timeout 60;

location / {
    proxy_pass         http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection keep-alive;
    proxy_set_header   Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
}

}

В служебном файле сделал так:

[Service]
WorkingDirectory=/var/www/html/
ExecStart=/usr/bin/dotnet service.dll
Restart=on-failure
RestartSec=10
SyslogIdentifier=​service-name
LimitNOFILE=65535

Единственное, что я не мог изменить, это результат open files. При запуске ulimit -a Раз за разом получал 1024.

После увеличения сервера до 32 vCPU (мы предпочитаем меньший экземпляр) я смог перейти с 2000 200 ответы до получения 499 ошибка 39286. После этого некоторые отправились в 499 и другие пошли в 504.

Посмотрев системный журнал, я увидел, что запросы завершаются более чем через 2 минуты, даже после того, как я установил proxy_read_timeout до 60 сек.

1) Почему нет open files изменить на более высокое значение? 2) Почему запросы проходят через proxy_read_timeout?