Azure App Serviceで実行されているASP.NET FrameworkアプリでサーバーGCを無効にする方法


8

Azure App ServiceでASP.NET MVC 5 / WCFアプリの高密度ホスティングを行っていますが、アイドルアプリはそれぞれ600〜1000 MBのメモリを使用しています。これは、メモリダンプによってGCヒープが明らかになっていることが前提です約40MBまでです。これはサーバーGCが原因であると思われるので、https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcserver-element を追加して無効にしてみました

<gcServer enabled="false" />

私のweb.configに、しかしこれは何の効果もないようです

GCSettings.IsServerGC

まだtrueを返しています。ここで何が欠けていますか?

編集:

通常のIISを使用すると、https://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-poolを使用して実行できますが、Azure App Serviceでは、これを行うための権限がありません。


1
あなたが持っていると思う問題は何ですか?アプリがメモリを使いすぎていますか?あなたが問題を抱えていると思っているように聞こえますが、問題はありません。
ニール

@Neil私が説明したように、アプリは最大1GBのメモリを使用して何もせず、分析したように、GCヒープの使用率は約40MBしかありません。サーバーGCはワークステーションGCよりもメモリフットプリントが高いことがわかっているため、この場合のサーバーgcの利点よりも、より効率的なメモリ使用率の方が重要です。
スチマン

彼らが実際にそれを使用しない場合、彼らがそれを主張する間、それは本当にそこにはありません。これは、幽霊を狩ることを意味します(予約ではなく使用)。
TomTom

@TomTomつまり、私のApp Serviceプランでは、メモリ使用率が80%程度の物理リソースを消費します。効果的に使用されていないだけです。
スチマン

1
この設定はASP.NETでは機能しないようです。私は試しましたが、私のローカル環境でも動作しません。ASP.NET Coreでも問題なく動作します。
トム・羅

回答:


0

まず、GC.Collect()を使用してコンポーネントのメモリ使用量を手動でデバッグする必要があるかもしれません:https : //docs.microsoft.com/en-us/dotnet/api/system.gc.collect ?view = netcore-3.1

このようにして、不正なガベージコレクションが原因でメモリリークを引き起こすコードの特定の部分、または特定のサードパーティライブラリを使用している部分を特定できる場合があります。

この非常に退屈な部分を完了したら、問題の原因に応じて、コードブロックを手動で破棄する(using var item = new NameOfClass())IDispose、それを引き起こしているクラスでti実装を試すことを検討する必要があります。https:/ /docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.