2

共有サーバーでホストされている ASP.NET MVC 3 アプリケーションを使用していますが、次の制限があります。

  1. 100 MB の RAM
  2. CPU の 15%

ホスト管理者は、アプリケーションがこれらの制限に達すると、アプリケーション プールが再起動されると言います。

デプロイ後、アプリケーション プールの再起動が速すぎる (数分後) ことに気付きました。MonitorAspNetApplicationを使用してメモリ使用量を確認しました。

最初のロードでは、割り当てられたメモリは約 8 または 9 MB であり、使用されたメモリは約 500 または 600 KB です。

しかし、アプリケーション (CRUD 操作など) の使用を開始すると、使用メモリは増減しますが、数 (6-10) メガバイトを超えることはありません。ただし、割り当てられたメモリは 100 MB に達するまで徐々に増加し、その後アプリケーション プールがリセットされます。

なぜこれが起こっているのかわかりません。アプリケーションは大きくなく、複雑な操作や重いクエリは実行しません。

このプロジェクトでは、最初に EF コード、StructureMap、AutoMapper、および ELMAH を使用しています。

  1. この問題の考えられる理由は何ですか? それらを検出して解決するにはどうすればよいですか?
  2. これらのツール (EF、StructureMap など) がこのメモリ使用量を引き起こす可能性はありますか?
  3. これはメモリリークですか?またはそれは何か他のものと呼ばれていますか?
4

1 に答える 1

0

これは、共通言語ランタイムの性質によるものです。ガベージ コレクターは、メモリが少ない場合は高次の世代を収集しますが、アプリが 100 MB のメモリを取得すると、システムには多くの空きメモリがあります。自分でメモリ使用量を監視し、使用量が 100 MB 近くになったら GC.Collect を呼び出す必要があります。

于 2012-12-08T06:54:28.823 に答える