古い ASP.NET アプリケーションがあります。httpWebRequest をリモート REST サーバーに送信し、XML を取得します。ほとんどの場合、アプリケーションは正常に動作します。最近、1 日に数回、CPU 使用率が高い問題が発生しました。
CPU 使用率が高い時間帯に、これらの httpWebRequest 接続を監視しました (w3wp プロセスの netstat をチェックすることによって)。最初に接続が「ESTABLISHED」から「CLOSE_WAIT」状態に変化し、接続がタイムアウトした後、それらの接続が 1 つずつ消え、その後接続がなくなります。
IIS をリセットした後、w3wp.exe プロセスが再び開始されたとき、まだ httpWebRequest ターゲット サーバーへの接続を見つけることができませんでした。そのため、CPU 使用率は常に高いレベルにとどまっています。数回のリセットの後でも、問題は解決しません。いくつかの接続が httpWebRequest ターゲット サーバーへの接続を開始するまで、CPU 使用率が低下しました。
コードが httpWebRequest を適切に処理していないことが問題である可能性があると実際に考えたので、ここに別の質問を投稿しました。.
その質問で述べたように、 のタイムアウト例外もたくさん見つかりましたSystem.Net.HttpWebRequest.GetResponse()
。CPU 使用率が非常に高い場合、5 分以内に 3500 の同じ例外が見つかりました。
何がこの種の問題を引き起こす可能性があり、何が薬である可能性がありますか? アプリケーションがリクエストを送信しないのはなぜですか (netstat に接続がないため)。
念のため、ソースコードを次に示します。
System.Net.HttpWebResponse httpWebResponse = null;
System.IO.Stream stream = null;
XmlTextReader xmlTextReader = null;
try
{
System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request);
httpWebRequest.ReadWriteTimeout = 10000;
httpWebRequest.Timeout = 10000;
httpWebRequest.KeepAlive = false;
httpWebRequest.Method = "GET";
httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
stream = httpWebResponse.GetResponseStream();
xmlTextReader = new XmlTextReader(stream);
xmlTextReader.Read();
xmlDocument.Load(xmlTextReader);
//Document processing code.
//...
}
catch
{
//Catch blcok with error handle
}
finally
{
if (xmlTextReader != null)
xmlTextReader.Close();
if (httpWebResponse != null)
httpWebResponse.Close();
if (stream != null)
stream.Close();
}