IIS 6.0でホストされているWCFサービス(.NET Framework 3.5に組み込まれています)があります。wcfサービスでスレッドが異常終了する例外
- を次のように
コードの流れがある(別のWebサービスである)クライアントは、バックグラウンドで処理を行うためのスレッドを起動し、すぐに呼び出し先に応答WCFサービスに
- WCFサービスを呼び出します。
- すべての処理を完了したバックグラウンドスレッドは、スレッドをコールバックします。この呼び出しは、クライアントがWebサービスであるため、基本的にHTTPs要求です。
WCFサービスをロードテストして、しきい値を定義しています。以下のような結果が得られます。
1分以内にWCFサービスに対して約1024回繰り返されます。各反復を完了するのにかかる時間は約25〜30分です。 しかし、4回目の反復ではバルク障害が発生します。要求の約50%は以下の例外を除いて失敗します。
例外スレッドが中止されました。
スタックトレース
21_10_2016_09_30_52,9:30:52 AM,Information,Thread name- apSwTTbLTETfwT3y Stack trace in ProcessTestConversion method - at System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
at System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
at System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean exitContext)
at System.Net.LazyAsyncResult.WaitForCompletion(Boolean snap)
at System.Net.Connection.SubmitRequest(HttpWebRequest request, Boolean forcedsubmit)
at System.Net.ServicePoint.SubmitRequest(HttpWebRequest request, String connName)
at System.Net.HttpWebRequest.SubmitRequest(ServicePoint servicePoint)
at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
at System.Net.HttpWebRequest.GetRequestStream()
.
.(My function calls stack trace)
.
.
私はこの問題を解決しようとした変更内容は次の通りです:web.configファイルで
<behavior>
<serviceThrottling maxConcurrentCalls="2000"
maxConcurrentInstances ="2400"
maxConcurrentSessions ="400"/>
</behavior>
web.configファイルで
<system.web>
<compilation debug="false" />
<httpRuntime executionTimeout="1800"/>
</system.web>
web.configファイル
ServicePointManager.DefaultConnectionLimit = 100; (Change in code)
で
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "100" />
</connectionManagement>
</system.net>
StackOverflowの上の多くの人々によって示唆されているように私は0にアプリケーションプールののIdleTimeoutプロパティを設定しました。
これまでストリームが使用されている場所では、私はすべての場所を処分しています。だからすべてのストリームが閉じられている。
誰がスレッドを中断しているのか、なぜ、スレッド中断開始の原因を追跡する手段やツールがあるのかを教えてください。
が、それはクライアントがREQを中止することが可能である
その他代替ソリューションは
Dispose
などを実装することができますこれはサーバー側でも例外を生成します。 – JehofASP.NETは必要に応じて常にワーカープロセスを起動して強制終了します。あなたのスレッドは単にASP.NETによってシャットダウンされるかもしれません。コンピュータで同時に実行できるスレッドの数を確認してください。また、テスト中にプロセッサのパフォーマンスを追跡しようとします。 – Alexandr
プールされたコールの量を増やしますが、バッファサイズは増やしませんでした。私はそれのために多くの通話が落とされているという気持ちがあります。 – Franck