1

クラシック モードで .NET 4.0 を使用して IIS7 で現在ホストされている WCF サービスがあります。通常、このサービスは 250 から 400 MB の間で動作します。これは、接続されているデータベースのサイズが約 300 MB しかないため妥当です。メモリ使用量とともに、CPU 使用率は 0% から 15% の間にとどまります。その後、ランダムに CPU とメモリの使用量が劇的に急増します。RAM の使用量は物理メモリの制限 (この EC2 インスタンスでは 1.7GB) まで上昇し、CPU は少しの間 100% でピークに達し、その後 25% から 50% の間に戻ります。数分後、メモリ使用率と CPU 使用率が通常に戻ります。

誰がこれを引き起こしているのか考えていますか? そうでない場合、問題を追跡する良い方法はありますか? PerfMon を使用して使用状況を確認しましたが、WCF サービスで実際にすべてのメモリが使用されている場所を追跡する良い方法が見つかりません。任意の提案をいただければ幸いです。

4

2 に答える 2

3

接続を適切に閉じていないように思えます。WCF を使用している場合は、接続が IDisposable を実装することに常に注意してください。これを使用しないと、接続が長続きし、データが保存されます。「using」を適切に使用すれば、おそらく問題を解決できます。

次に、PerSession モードを使用している可能性があります。セッションを使用している場合、それらはもちろん保存されます:-) また、これを引き起こす可能性のある既知のバグが WCF にいくつかあります。最も注目すべきは「シングルトン」モードです。それを「PerCall」に変更すると、問題が完全に解決される場合があります。

これがメモリリークにつながるケースをいくつか見てきました。

プロファイリングに関しては、私は Red-gate / ANTS の大ファンですが、他にもプロファイラーがいます。

于 2013-03-29T10:45:46.050 に答える