0

WCF サービスをある実稼働サーバーから別のサーバーに移動した後、構成が非常に似ていますが、Windows のイベント トレースを介したカスタム イベント ログは機能しなくなりましたが、1 つのアプリに対してのみ機能していました。

エラーは EventProvider クラスの ctor でスローされており、Win32 の「十分なストレージがありません」というエラーです。

WCF サービスは、呼び出し構成ごとの「同時実行モード複数、呼び出しごとのインスタンス コンテキスト モード」スレッドです。監視時に 60 のスレッドがプロセスに属していました。EventProvider ctor は呼び出しごとに呼び出されます。AppFabric でホストされる IIS/WAS です。

同じサーバー上の別のアプリは正常に動作しています。

これを診断する方法がわかりません。誰かが出発点を提案することさえできれば、私は感謝しています.

4

1 に答える 1

1

OK、これは VMWare 構成に関連していることが判明しました。マシンは 12Gb サーバーですが、プールから 6Gb を取得して、6Gb を永続的に予約するように構成されています。多くのメモリ負荷と物理レベルでのスワッピングにより、ランダムな Win32 例外が VM でスローされ始めました。解決策は、使用可能なメモリを増やすことです。

更新: 上記は偶然の一致であり、おそらく VMWare とは関係ありません。

問題は1か月後に戻ってきました。サーバー上の何かが変更されてガベージ コレクションが遅くなったようで、呼び出しごとの wcf サービスが EtwRegistration ハンドルを明示的に破棄していません (つまり、EventProvider を明示的に破棄していません)。実験では、プロセスごとに 1000 個の EventProvider の制限があることが示されています。サーバーでのパフォーマンスの変化により、その制限に達するハンドル リークが発生しました。

さらなる更新: 何らかの理由でクリーンアップを強制するのではなく、プロバイダーの数を増やしたい場合は、これが役立つと思いますhttp://support.microsoft.com/kb/2583244

于 2013-10-25T08:04:33.567 に答える