- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
ОС: Дебиан.
99% запросов - статика, файлы 4-10Кб, отдаются nginx-ом.
Нагрузка до 1500-1700 обращений в секунду (записей в логе в секунду).
В sysctl стоит
net.ipv4.ip_local_port_range="1024 65500"
Также установлены в "единицу" reuse, recycle.
Периодически при пиковой нагрузке - не могу достучаться до сайта. В этот момент по "ss -s" видно, что не хватает диапазона: 1024-65500.
Все остальное в норме:
nginx = 4 процесса по 4-5% нагрузки на каждое ядро CPU (4 ядра в системе),
диск - до 5% (в основном, запись лога большими блоками; объем файлов значительно меньше ОЗУ сервера - поэтому все это закешировано осью в памяти),
загруженность канала -- 100-120 Мбит (т.е. есть запас).
Как быстро побороть в пиковые моменты (редко), не устанавливая второй сервер?
у вас 65500 одновременных соединений ?
эти соединения что-то делают или просто держат открытым сокет ?
Dimka, 10 кило, по 1700 штук в секунду не должны создавать такое количество подключений. Это означает, что странички отдаются довольно таки долго. На вскидку можно предложить выключение keepalive и:
tcp_nodelay on;
tcp_nopush on;
HTTP 1.1 и keepalive до бэкэнда пробовали?
Dimka, самое очевидное решение - закупить еще IP и в DNS отдавать сразу пачку.
Ну а пока таймауты для TIME_WAIT можно понизить.
это статистика аж с момента перезапуска.
А на самом деле правильно ли вы оцениваете остроту этой проблемы ? Просто посчитайте все типы строчек соединений в netstat .
Плагины для систем мониторинга есть соответствующие чтобы этот ресурс графически представить . Например вот - http://munin-monitoring.org/browser/munin-contrib/plugins/network/tcp-states
Кроме добавления второго IP, может в конфигах что-то изменить?
Конфиг nginx 1.8
sysctl
---------- Добавлено 05.03.2016 в 21:51 ----------
На вскидку можно предложить выключение keepalive и:
отключить keepalive вообще или уменьшить время? Остальное включено.
keepalive_timeout 60 22;
явно есть куда уменьшать это в nginx.
даже если это хостинг картинок, уместно будет и 5-10 секунд.
Опять же, в присутствии мониторинга состояний nginx можно было бы более уверенно рассуждать. Допустим, видно было бы сколько живых запросов, а сколько keep-alive сделать выводы о соотношении и насколько это общее число соединений приближается к критическому 64k. Сделайте мониторинг.
net.ipv4.ip_local_port_range="1024 65500"
Периодически при пиковой нагрузке - не могу достучаться до сайта. В этот момент по "ss -s" видно, что не хватает диапазона: 1024-65500.
По-моему, вы с неправильного вывода начали и всех запутали.
Этот лимит вам вообще мешать не должен. Чистому серверу http ведь эти порты вообще не нужны. Все входящие имеют значение локального порта = 80.
Это может оказывать влияние только если у вас еще и apache или еще какие-то необычные штуки требующие на каждое подключение исходящих подключений куда-то.
Может подробнее опишете ? Покажете этот самый netstat ss -s ?
Хотя все советы остаются в силе. В любом случае в такой нагруженной машине надо уменьшать число соединений как-нибудь, а worker_connections увеличивать.
И надо бы проверить не включен ли conntrack в iptables. Не нужен он, а лимит подключений создает равный net.ipv4.netfilter.ip_conntrack_max создает.
И самое главное: что в syslog сыпется от ядра, что вы его параметры тюнить начали? Какие ошибки?
Эти таймауты можно прописать или еще меньше сделать
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
Этот лимит вам вообще мешать не должен. Чистому серверу http ведь эти порты вообще не нужны. Все входящие имеют значение локального порта = 80.
Где-то меня в интернет-советах ввели в заблуждение :) Ориентировался на фразу из интернета:
"max clients is also limited by the number of socket connections available on the system (~64k)"
видимо, ошибочно?
И судя по "69883 ESTABLISHED"(ниже) - вы правы, это выше 65К
Покажете этот самый netstat ss -s ?
Сейчас вечер - на сервере спокойно (и наплыв с проблемами бывает редко).
Сейчас,
netstat при высоком keepalive 600 в nginx:
69883 ESTABLISHED
3694 TIME_WAIT
416 FIN_WAIT2
338 LAST_ACK
104 SYN_RECV
92 CONNECTED
46 FIN_WAIT1
37 CLOSING
1 servers)
1 I-Node
при keepalive 4:
21949 TIME_WAIT
3992 ESTABLISHED
3192 FIN_WAIT2
709 FIN_WAIT1
449 LAST_ACK
188 CONNECTED
113 SYN_RECV
50 CLOSING
1 servers)
1 I-Node
---------- Добавлено 07.03.2016 в 17:09 ----------
И надо бы проверить не включен ли conntrack в iptables. Не нужен он, а лимит подключений создает равный net.ipv4.netfilter.ip_conntrack_max создает.
Если я правильно проверял, то выключен. И "не найдено" для net.ipv4.netfilter.ip_conntrack_max
---------- Добавлено 07.03.2016 в 17:27 ----------
Опять же, в присутствии мониторинга состояний nginx можно было бы более уверенно рассуждать. Допустим, видно было бы сколько живых запросов, а сколько keep-alive
Подскажите, что именно отслеживать? Поставил munin и добавил плагин nginx_status.
---------- Добавлено 07.03.2016 в 17:30 ----------
worker_connections увеличивать.
Поставил 20480 (для 4 worker_processes ). Или можно смело ставить 51200*4?
Возможны проблемы с производительностью при больших значениях worker_connections?
---------- Добавлено 07.03.2016 в 18:21 ----------
Эти таймауты можно прописать или еще меньше сделать
Цитата:
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
Установил. Еще установил
net.ipv4.tcp_keepalive_time=600