Webサイトと呼ばれるJSONおよびPOSTメソッドに基づくWCF Webサービスがあります。この関数は、単純なコードを持っているだけで怒鳴るのコードを使用して別のWebサービスを呼び出します。問題が大きいことを、私はIISで見ることができるということですIISでホストされているWCFには多くの要求があり、サービスは遅くなります
class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).KeepAlive = true;
(request as HttpWebRequest).ContentType = "application/json";
}
return request;
}
}
:
using (var cli = new MyWebClient())
{
Task<string> t = cli.UploadStringTaskAsync(myURI, "POST", request);
if (t == await Task.WhenAny(t, Task.Delay(400)))
{
response = t.Result;
}
else
{
response = "";
}
cli.Dispose();
}
とMyWebClient
クラスは次のように実装されています要求の数は、私のワーカープロセスの18秒以上、さらには1〜2時間開いています(そのうちの1つの添付イメージで確認できます)。そして、これはサービスを非常に遅くします。このサービスには1秒あたり約2Kリクエストがあり、このサービスのアプリケーションプールには12のワーカープロセスを含むWebガーデンがあり、キューの制限は10Kです。このような状況が存在し、予測可能な時間で働いて4つのワーカープロセス(約450ミリ秒)(例えば)であり、IISはその要求の最大経過時間は約380
a large number of requests that remain open in the IIS
注意であることを示しているときに起こること私はcli.UploadStringTaskAsync
を使用しており、従ってタイムアウトはcli
のために考慮されません。だから、タイムアウトをシミュレートするためにt == await Task.WhenAny(t, Task.Delay(400))
のようなコードを実装する必要があります。
何が問題だと思いますか? await
を使用すると多くのコンテキストスイッチが発生し、要求はCPUによって実行されるようにキューに入れられますか?
編集:
Hereあなたが役に立ついくつかの勧告を見つけることができますが、誰も助けていないと問題を解決することができます。私はアプリケーションのWeb設定でそれらを設定しましたが、問題を解決できませんでした。
更新:追加情報として
は、ネットワークカードが1Gであることに注意して、最大で我々は100Mgb/sの帯域幅の使用を持っています。 Intel Xeon E5-1650 V3 3.5 GHzの6つのコアと12の論理プロセッサがあります。私たちは128GBのRAMと480GBのSSDを持っています。