[SOLVED] Docker nginx + node.js + 502 (только через nginx)

Добрый день.
Сначала ситуация:
1) Все в докере (nginx) (нода)
2) в nginx proxy_pass http://127.0.0.1:3000
Если отправлять запросы напрямую в ноду - то ошибок нет.
Есть отправлять запросы в nginx переодически ловлю 502. ошибок на ноде не вижу.
Посмотрел strace nginx:


connect(39, {sa_family=AF_INET, sin_port=htons(3000), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRNOTAVAIL (Cannot assign requested address)
gettid()                                = 7
write(4, "2017/12/15 12:23:30 [crit] 7#7: "..., 661) = 661
close(39)                               = 0
writev(34, [{"HTTP/1.1 502 Bad Gateway\r\nServer"..., 191}, {"<html>\r\n<head><title>502 Bad Gat"..., 120}, {"<hr><center>nginx/1.10.1</center"..., 53}, {"<!— a padding to disable MSIE a"..., 402}], 4) = 766
shutdown(34, SHUT_WR)                   = 0

Сеть в докере host
Любая идея.

strace ниочОм,

strace ниочОм, выхлопы

/var/log/nginx/error.log

покажут?

2017/12/15 15:20:53 [crit]

2017/12/15 15:20:53 [crit] 14#14: *6362974 connect() to 127.0.0.1:3000 failed (99: Address not available) while connecting to upstream,

меня вот как раз смущает

меня вот как раз смущает EADDRNOTAVAIL
В этот же самый момент я отправляю запросы в ноду напрямую без проблем напрямую. прям в 3000 порт.
Я бы понял тормоза , 504. Но тут - я в тупике и куда двигаться не знаю.

/

myaucher написал(а):
меня вот как раз смущает EADDRNOTAVAIL

Если сервер под нагрузкой (не обязательно nginx), то можно прорицать увлекательнейший квест с системными ограничениями (начиная с количества портов).
В общесистемных журналах (+ kernel.log) что-нибудь интересное есть?

:wq
--
Live free or die

Я вроде разобрался. По

Я вроде разобрался.
По нагрузкой.
Вы правы, но в логах на тему упираний в лимиты пусто (это уже отдельный вопрос)
В итоге решилось тем что увеличил ip_local_port_range.
Но вот почему в логах тихо - вопрос конечно.

Там характер нагрузки - много коротких атомарных запросов (стата)
# netstat -anp | grep ESTA | wc -l
195

# netstat -anp | grep WAIT | wc -l
54054

.

Есть мнение, тебе может пригодиться как минимум:

net.ipv4.tcp_tw_reuse = 1

Ну и таймаутами поиграться тоже скорее всего будет нелишне.

:wq
--
Live free or die

Последний раз когда я игрался

Последний раз когда я игрался я так и не научился видимо правильно готовить reuse и recycle и чаще с ними выхватывал проблем в виде рандомой невозможности вообще установить соединение. Но это видимо мои кривые руки. Если есть опыт использования у вас - поделитесь результатами.

.

myaucher написал(а):
Последний раз когда я игрался я так и не научился видимо правильно готовить reuse и recycle и чаще с ними выхватывал проблем в виде рандомой невозможности вообще установить соединение. Но это видимо мои кривые руки. Если есть опыт использования у вас - поделитесь результатами.

Когда (на какой версии ядра) и где (в смысле конфигурации ядра) это было?

С какими симптомами (возвращаемся к вышеподразумевавшейся задачи настройки подсистемы журналирования)?

:wq
--
Live free or die

еще на 2.6 на RH6 )) Согласен

еще на 2.6 на RH6 ))
Согласен с тем что попробовать имеет смысл )

.

На RH6 было ядро 2.4!
Не стоит путать с RHEL6 ☺

:wq
--
Live free or die

конечно rhel

конечно rhel

таймауты выкрученны. Тут

таймауты выкрученны. Тут вопросов нет.

?

myaucher написал(а):
таймауты выкрученны. Тут вопросов нет.

Так ли уж нет?

Принцип составления перечня изменяемых параметров?
Умолчательные значения?
Текущие?
Методика (или критерий) определения оптимальных значений?

:wq
--
Live free or die

Давайте обсудим. Всегда рад

Давайте обсудим. Всегда рад узнать что то новое и получить дельный совет.

Это то что менялось.

net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_synack_retries=3
net.core.somaxconn=8192
net.netfilter.nf_conntrack_max=67108864
net.netfilter.nf_conntrack_generic_timeout=60
net.netfilter.nf_conntrack_tcp_timeout_established=600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=10
net.netfilter.nf_conntrack_tcp_timeout_time_wait=10

# cat /sys/module/nf_conntrack/parameters/hashsize
8388608

Сервер приема статистики. Запросов - много но они мелкие и с огромного количества src. Почти как flood.
Основная проблема была в time_wait и коннтрак. Табличка забивалась.
Но вообще есть мысль избавится от коннтрака. Его требует докер - но это не проблема в принципе. Сеть managed мы нигде не используем практически или имеем возможность отказаться от её использования. При тормозах на сети забивался коннтрак и ловил dropping packet. Из за этого такой большой размер таблицы (память не проблема).

Забыл сказать

Забыл сказать спасибо.
Спасибо!

ЧаВо?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".