171 похожих чатов

Привет, есть идеи во что может упираться, что за магическая

цифра такая в 400 K?

26 ответов

94 просмотра

400к time_wait сокетов ?

я бы скорее думал почему их так много. Пробовали net.ipv4.tcp_tw_recycle=1?

𝚔𝚟𝚊𝚙𝚜- Автор вопроса
Илья Журавлёв
я бы скорее думал почему их так много. Пробовали n...

Да, вот в рамках диагностики пытаюсь разобраться 🙂

𝚔𝚟𝚊𝚙𝚜
Да, вот в рамках диагностики пытаюсь разобраться 🙂

Ну если вам реюз не нужен то можно крутануть tcp_fin_timeout Но лучше, конечно, понять и исправить причину

𝚔𝚟𝚊𝚙𝚜- Автор вопроса
Илья Журавлёв
freebsd?

бубунта 5.13.0-27-generic

𝚔𝚟𝚊𝚙𝚜
бубунта 5.13.0-27-generic

значит не там смотрите Это от sysctl

вы бы написали что это. я ставлю на ограничение в которое уперся сервак, но какое оно зависит от того, что за сервер. 1) оно может у него как в конфиге быть прописано, 2) или выражаться в лимите на число открытых файловых дескрипторов, тут наврядли т.к. в time wait вроде он уже не занят 3) или лимите на число окрытых портов если все соединения с малого числа точек. Например у вас 8 серверов у которых ip_local_port_range поставлен так что сокетов 50 тыс, их 8 и они долбятся в один сервак. Вам было бы если честно полезней вывести ошибки на создании сокета, если их нет то time wait фигня.

𝚔𝚟𝚊𝚙𝚜
у меня такого параметра нет

В ещё можно осторожно tcp_tw_reuse...

Anatoly Orlov
вы бы написали что это. я ставлю на ограничение в ...

Сокеты они там в бакетах и количество бакетов задаётся как и их размер - так что 400к это вероятно от этих настроек лимит

𝚔𝚟𝚊𝚙𝚜- Автор вопроса
Илья Журавлёв
значит не там смотрите Это от sysctl

# sysctl net.ipv4.tcp_tw_recycle sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory # sysctl -a | grep recycle <пусто>

Илья Журавлёв
я бы скорее думал почему их так много. Пробовали n...

1. Включив tcp_tw_recycle, вы говорите ядру Linux, чтобы оно использовало в качестве MSL не константу, а рассчитало его на основе особенностей именно вашей сети. Как правило (если у вас не dial-up), включение tcp_tw_recycle значительно сокращает время нахождения соединения в состоянии TIME_WAIT. Но здесь есть подводный камень: перейдя в состояние TIME_WAIT, ваш сетевой стек при включенном tcp_tw_recycle будет отвергать все пакеты с IP второй стороны, участвовавшей в соединении. Это может вызывать ряд проблем с доступностью при работе из-за NAT, с чем мы и столкнулись в приведенном выше кейсе. Проблема крайне сложно диагностируется и не имеет простой процедуры воспроизведения/повторяемости, поэтому мы рекомендуем проявлять крайнюю осторожность при использовании tcp_tw_recycle 2. в тырнетах рекомендовалось добавить в ядро параметр для ускоренного освобождения сокета net.ipv4.tcp_tw_recycle = 0 но при перезапуске конфига влезала ошибка # sysctl -p /etc/sysctl.conf sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory Небольшой гуглеж дает ответ, что параметр net.ipv4.tcp_tw_recycle был выпилен из ядра на версии 4.12, ввиду того, что имелись проблемы с работой из-за NAT. Чекаем версию ядра # uname -a Linux mail.xxxx 5.18.4-1.el8.elrepo.x86_64 и понимаем что это как раз про нас. Вместо него рекомендуется устанавливать параметр net.ipv4.tcp_tw_reuse = 1 который позволяет использовать TIME-WAIT сокет повторно. по умолчанию в системе взведено значение 2, которое позволяет этот функционал только для loopbac

Dmitry
Сокеты они там в бакетах и количество бакетов зада...

Мы один раз ловили очень неприятный факап. У нас было 3 балансера внутренних для grpc, и в какой-то момент чуваки задеплоили web чат который сделал 10М живых сокетов (открывал постоянно, а не когда чат начался), и у серваков просто не хватило пар srcip-srcport-dstip-dstport, для внутренних IP/портов (для внешних как раз не проблема т.к. там один пользователь один ip). Это я к тому что даже если там нет ограничения в 400К его легко можно достичь конфигурацией нескольких серверов вокруг

Anatoly Orlov
Мы один раз ловили очень неприятный факап. У нас б...

Как сделать серверу плохо я и так знаю, лучше расскажи как сделать хорошо )))

Dmitry
Как сделать серверу плохо я и так знаю, лучше расс...

так вы расскажите, что за сервер, что за соединения. Я думаю у вас на сервер наведена ужасная порча, ее очень сложно снять просто так, нужна либо фотография сервера либо описание, что он делает 🙂

𝚔𝚟𝚊𝚙𝚜- Автор вопроса
Anatoly Orlov
вы бы написали что это. я ставлю на ограничение в ...

небольшая вводная: Есть кластер с постоянной нагрузкой гдето 50000rps. Периодически в часы пик всё начинает резко тупить, но при этом на графиках по ресурсам особых аномалий нет. Но при этом соединение между сервисами начинает устанавливаться куда медленнее чем обычно. Внимание привлёк этот график, т.к. есть подозрение что упираемся в какой-то лимит по числу открытых сокетов.

𝚔𝚟𝚊𝚙𝚜
небольшая вводная: Есть кластер с постоянной нагр...

tw если мы этот график читаем верно это не открытые, а почти закрытые

𝚔𝚟𝚊𝚙𝚜
небольшая вводная: Есть кластер с постоянной нагр...

Сервер общается с малым количеством внутренних серверов, т.е. это бекенд и общается с фронтом. Или сервер сам фронт и отвечает разным пользователям? смотрите можно подтвердить, что соединение не устанавливается с помощью tcpdump с этого сервера. Дальше если соединение пришло, но не установилось вы смотрите код ошибки на сервере, а если никто даже не пытался установить, то смотрите смотрите код ошибки на клиенте.

𝚔𝚟𝚊𝚙𝚜- Автор вопроса
Anatoly Orlov
вы бы написали что это. я ставлю на ограничение в ...

Проблема была в количестве устанавливаемых соединений nginx-ingress-контроллера ко внутренним подам. Сам nginx-ingress-controller работал в host network. И при каждом обращении к подам занимал порт на адресе ноды, таких подключений было очень много, именно из-за них заканчивались свободные порты и не могли установиться новые подключения. Решение: Передеплоить nginx-ingress в: - Deployment вместо Daemonset - Количество реплик x3 от общего числа нод - переключить externalTraficPolicy из Cluster в Local (в этом случае для входящих подключений используется DstNAT вместо SourceNAT, который не занимает портов на ноде)

𝚔𝚟𝚊𝚙𝚜
Проблема была в количестве устанавливаемых соедине...

А у тебя автоскейлинг нод есть? Если да, не боишься такого https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-41/Layer-3/Equal-Cost-Multipath-Load-Sharing-Hardware-ECMP/#resilient-hash-buckets ?

𝚔𝚟𝚊𝚙𝚜- Автор вопроса
Grigoriy Rochev
А у тебя автоскейлинг нод есть? Если да, не боишьс...

Неа. У меня железки. Но спасибо за предостережение

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта