Связанные TCP-соединения продолжают увеличиваться и создают тайм-ауты вызовов службы - PullRequest
0 голосов
/ 04 мая 2020

У нас есть клиент-сервер. net приложение с Oracle БД. Следующая проблема возникает только в определенной пользовательской среде c, поэтому, вероятно, не проблема с приложением.

После выполнения одного и того же действия определенное c количество раз мы получаем несколько тайм-аутов от вызовов службы. Под действием я подразумеваю серию сервисных вызовов для проверки, дефолта, вставки. (Это экран WPF, в котором вы заполняете кучу данных, а затем сохраняете их). Таким образом, я могу выполнить одно действие идеально 12 раз из 13 раз, когда приложение зависает, и через некоторое время мы получаем тайм-ауты. Это всегда будет 13 раз (даже если между ними предприняты другие действия), однако вызов службы, для которого происходит тайм-аут, отличается (но все они выполняются асин c). Только закрытие клиентских приложений помогает решить проблему.

Запуск клиентского приложения на другом компьютере не оказал влияния, но я провел тест, где я размещал серверное приложение на своем компьютере и подключался к клиентской БД ru тогда проблема не возникла.

Я заметил, что некоторые вызовы службы, которые по тайм-ауту, никогда не отображались в fiddler (так что кажется, что запрос никогда не отправлялся)

Я сделал немного погуглил и наткнулся на https://docs.microsoft.com/en-us/windows/client-management/troubleshoot-tcpip-port-exhaust

Я использовал

Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name="ProcessName";Expression={(Get-Process -PID ($_.Name.Split(',')[-1].Trim(' '))).Name}}, Group | Sort Count -Descending

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

Я запустил новое клиентское приложение и проделал то же действие, что и раньше, 13 раз. Я заметил, что Связанные соединения увеличивались после каждого действия с + - 8 соединениями. Он продолжал увеличиваться, и когда в действии 13 произошли тайм-ауты, Связанные соединения прекратились между 115-120 и не стали выше.

Это поведение, которое происходит только для этого конкретного c клиента. Когда я проводил тест с размещением серверного приложения на моем компьютере, связанные порты не превышали 40, а через несколько раз даже снижались. То же самое для других клиентских сред.

Интересно отметить, что если я впервые сделал несколько других обращений в службу поддержки и начал свои 13 действий, когда привязанные соединения уже были на 50 или около того, тайм-ауты по-прежнему происходили только на 13 и общее количество связанных подключений было около 140 +.

Выход для Get-NetTCPConnection выглядит следующим образом Выход Get-NetTCPConnection Также, когда я использую инструменты, такие как netstat или CurrPorts, эти подключения не получают

(Исправление: netstat -anoq отображает их, netstat -anob нет)

Другие вещи, которые я проверял:

  • Выполнение запросов списка appcmd на сервере приложений не показывал запущенный запрос
  • Используя TCPView на клиенте, я видел только установленное соединение и ни одно из 120 связанных подключений. Это нормально?
  • Используя TCPView на сервере приложений, я увидел установленные соединения для серверного приложения, но здесь нет ничего особенного. Только много системного процесса с PID 0, но я читал, что это нормально.

Кто-нибудь лучше понимает, почему это может произойти и как это исправить?

Google также узнал, что это может быть связано с брандмауэром, который сбрасывает TCP-соединения, не сообщая клиенту. Есть ли способ узнать это наверняка?

...