現在、ASP.NET MVCで開発したサイトをIIS8で稼働させています。
そのサイトの(IISのワーカープロセスの)メモリの使用量が多くどうにか抑えたいのですが、何かいい方法はないでしょうか。
サイトのメモリ使用量が多いため、サーバーのメモリの使用量が80%を超えることがあり、そのたびに問題がないか調査する必要があるため手間がかかっています。
処理の見直しをしてあまりにもメモリを使用する処理は修正したのですが、ページ遷移するごとに1~30MBくらいメモリを使用しておりおそらくガベージコレクションが行われるまで使用したメモリが積み重なっている状態です。
#試したいこと・疑問
・プログラムの方で画面遷移の際にGC.Collect()をして明示的にガベージコレクションを行った場合、GC.Collect()をページ毎に行うことにより問題はおきないのか。
・IISのアプリケーションプールのリサイクルをメモリの使用量が100MB以上になったら行う設定にした場合、頻繁に100MBを超えてしまうような状況でワーカープロセスが乱立して問題になるようなことはないのか(リサイクルした場合、新しいプロセスが立ち上がるが、処理中のプロセスは処理が終わるまで残るという認識です)。
※上記について、ローカルでのテストでは問題なさそうでしたが、複数人・複数ブラウザで多くのアクセスがあった場合に問題が起こる原因にならないか心配しています。
・アプリケーションプール再起動後しばらくすると(何回かアクセスしてると?)ページ遷移してもメモリの増加が少なくなる。
調べると、マネージド ヒープのしきい値を超えてしまったとき?ガベージコレクションが行われるといったことが書いてあるサイトがあったのですが、メモリの増加が少なくなったのはマネージド ヒープのしきい値を超えガベージコレクションが行われたためなのでしょうか?
メモリの使用量が100MBくらいでメモリの増加が少なくなったり、300MBくらいになってもメモリが増加していったりするのでメモリの増加が急に少なくなる理由がわからず悩んでいます。
参考:https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/fundamentalsの「ガベージ コレクションの条件」
勉強不足で申し訳ありませんが、アドバイスなど頂けると助かります。