5つの外部サーバーを呼び出して、IIS6サーバー上の特定のWebページに対する要求ごとにXMLベースのデータを取得しています。現在のボリュームは、1秒あたり3〜5の着信要求、つまり1秒あたり15〜20の発信要求です。
サーバー(クライアント)から外部サーバー(サーバー)への送信要求の99%は正常に機能しますが、1日あたり約100〜200で、「操作がタイムアウトしました」という例外が発生します。
これは、サーバーにリソースの問題があることを示しています-ソケット、ポートなどの不足、またはスレッドロックがありますが、この理論の問題は、失敗が完全にランダムであるということです-すべてが失敗する連続した要求の数はありません-また、2台の外部サーバーが障害の大部分を占めています。
私の質問は、これらの例外をさらに診断して、問題が自分の側(クライアント)にあるのか、もう一方の端(サーバー)にあるのかを判断するにはどうすればよいですか?
リクエストの量が多いため、アナライザーをネットワークに接続することはできません。これらのいくつかの例外をキャプチャすることは非常に困難です。machine.configのCONNECTIONSとTHREADSをリセットしましたが、基本的なコードは次のようになります。
Dim hRequest As HttpWebRequest
Dim responseTime As String
Dim objWatch As New Stopwatch
Try
' calculate time it takes to process transaction
objWatch.Start()
hRequest = System.Net.WebRequest.Create(url)
' set some defaults
hRequest.Timeout = 5000
hRequest.ReadWriteTimeout = 10000
hRequest.KeepAlive = False ' to prevent open HTTP connection leak
hRequest.SendChunked = False
hRequest.AllowAutoRedirect = True
hRequest.MaximumAutomaticRedirections = 3
hRequest.Accept = "text/xml"
hRequest.Proxy = Nothing 'do not waste time searching for a proxy
hRequest.ServicePoint.Expect100Continue = False
Dim feed As New XDocument()
' use *Using* to auto close connections
Using hResponse As HttpWebResponse = DirectCast(hRequest.GetResponse(), HttpWebResponse)
Using reader As XmlReader = XmlReader.Create(hResponse.GetResponseStream())
feed = XDocument.Load(reader)
reader.Close()
End Using
hResponse.Close()
End Using
objWatch.Stop()
' Work here with returned contents in "feed" document
Return XXX' some results here
Catch ex As Exception
objWatch.Stop()
hRequest.Abort()
Return Nothing
End Try
助言がありますか?