Мне нужно настроить сервер с высоким трафиком. Сейчас у меня около 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
?