TCP сервис забит - как лечить?
От: Baiker  
Дата: 09.08.23 08:50
Оценка:
Ребят, помогите плиз с проблемой!

Есть обычный мультитрэдовый вендосервис, обслуживающий клиентов по TCP. Проблема: "глупые клиенты" делают кучу соединений, ломаются и отваливаются (не закрывая соединение корректно) и в результате висит куча соединений в подвешенном состоянии (точно не помню, что-то вроде closing, но точно не established). И соотв. новые клиенты не могут соединиться с сервисом.

Зарытый в недрах дотнета хитрозадый ограничитель давно был найден:

ServicePointManager.DefaultConnectionLimit = 5000;


При инициализации прослушки тоже лимиты повышены:

_sock.Listen(5000);


Для трэдов тоже выставлены приличные лимиты:

ThreadPool.SetMaxThreads(2000, 2000);


Но прикол в том, что "висящих" клиентов видно от силы штук 30 (из TCPView), а сервер уже забит(!). Как так??
Может, есть какие-то ЕЩЁ установки, заботливо спрятанные .NET-анжанерами? Или в венде какой-нть хитрый registry-ключ... Ну не может такого быть, чтобы 50 TCP-шек блокировали сервер! (да, работает всё на Windows Server)
Вот. Бьюсь не над алгоритмами, а над какими-то тупыми админскими проблемами.

UPD:
Висящие соединения имеют состояние CLOSE_WAIT, причём их Create Time аж сутки назад(!!).
Отредактировано 09.08.2023 9:32 Baiker . Предыдущая версия . Еще …
Отредактировано 09.08.2023 8:57 Baiker . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.