Информация об изменениях

Сообщение TCP сервис забит - как лечить? от 09.08.2023 8:50

Изменено 09.08.2023 8:57 Baiker

TCP сервис забит - как лечить?
Ребят, помогите плиз с проблемой!

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

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

ServicePointManager.DefaultConnectionLimit = 5000;


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

ThreadPool.SetMaxThreads(2000, 2000);


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

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

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

ServicePointManager.DefaultConnectionLimit = 5000;


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

_sock.Listen(5000);


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

ThreadPool.SetMaxThreads(2000, 2000);


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