Сообщение TCP сервис забит - как лечить? от 09.08.2023 8:50
Изменено 09.08.2023 9:32 Baiker
TCP сервис забит - как лечить?
Ребят, помогите плиз с проблемой!
Есть обычный мультитрэдовый вендосервис, обслуживающий клиентов по TCP. Проблема: "глупые клиенты" делают кучу соединений, ломаются и отваливаются (не закрывая соединение корректно) и в результате висит куча соединений в подвешенном состоянии (точно не помню, что-то вроде closing, но точно не established). И соотв. новые клиенты не могут соединиться с сервисом.
Зарытый в недрах дотнета хитрозадый ограничитель давно был найден:
При инициализации прослушки тоже лимиты повышены:
Для трэдов тоже выставлены приличные лимиты:
Но прикол в том, что "висящих" клиентов видно от силы штук 30 (из TCPView), а сервер уже забит(!). Как так??
Может, есть какие-то ЕЩЁ установки, заботливо спрятанные .NET-анжанерами? Или в венде какой-нть хитрый registry-ключ... Ну не может такого быть, чтобы 50 TCP-шек блокировали сервер! (да, работает всё на Windows Server)
Вот. Бьюсь не над алгоритмами, а над какими-то тупыми админскими проблемами.
Есть обычный мультитрэдовый вендосервис, обслуживающий клиентов по TCP. Проблема: "глупые клиенты" делают кучу соединений, ломаются и отваливаются (не закрывая соединение корректно) и в результате висит куча соединений в подвешенном состоянии (точно не помню, что-то вроде closing, но точно не established). И соотв. новые клиенты не могут соединиться с сервисом.
Зарытый в недрах дотнета хитрозадый ограничитель давно был найден:
ServicePointManager.DefaultConnectionLimit = 5000;
При инициализации прослушки тоже лимиты повышены:
_sock.Listen(5000);
Для трэдов тоже выставлены приличные лимиты:
ThreadPool.SetMaxThreads(2000, 2000);
Но прикол в том, что "висящих" клиентов видно от силы штук 30 (из TCPView), а сервер уже забит(!). Как так??
Может, есть какие-то ЕЩЁ установки, заботливо спрятанные .NET-анжанерами? Или в венде какой-нть хитрый registry-ключ... Ну не может такого быть, чтобы 50 TCP-шек блокировали сервер! (да, работает всё на Windows Server)
Вот. Бьюсь не над алгоритмами, а над какими-то тупыми админскими проблемами.
TCP сервис забит - как лечить?
Ребят, помогите плиз с проблемой!
Есть обычный мультитрэдовый вендосервис, обслуживающий клиентов по TCP. Проблема: "глупые клиенты" делают кучу соединений, ломаются и отваливаются (не закрывая соединение корректно) и в результате висит куча соединений в подвешенном состоянии (точно не помню, что-то вроде closing, но точно не established). И соотв. новые клиенты не могут соединиться с сервисом.
Зарытый в недрах дотнета хитрозадый ограничитель давно был найден:
При инициализации прослушки тоже лимиты повышены:
Для трэдов тоже выставлены приличные лимиты:
Но прикол в том, что "висящих" клиентов видно от силы штук 30 (из TCPView), а сервер уже забит(!). Как так??
Может, есть какие-то ЕЩЁ установки, заботливо спрятанные .NET-анжанерами? Или в венде какой-нть хитрый registry-ключ... Ну не может такого быть, чтобы 50 TCP-шек блокировали сервер! (да, работает всё на Windows Server)
Вот. Бьюсь не над алгоритмами, а над какими-то тупыми админскими проблемами.
UPD:
Висящие соединения имеют состояние CLOSE_WAIT, причём их Create Time аж сутки назад(!!).
Есть обычный мультитрэдовый вендосервис, обслуживающий клиентов по 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 аж сутки назад(!!).