
最近、メモリ使用量が最大になったためにダウンタイムが頻繁に発生しているサイトがあります。8GB RAM、Windows Server 2008 R2、IIS 7.5、WebForms 4.0 サイトを搭載した VPS を運用しており、同じサーバーで SQL Express を実行しています。通常、RAM の使用量は 2GB を大きく下回っています。あるとき、RAM が急速に最大まで増加し、その後突然低下する現象に遭遇しました。
それ以来、いくつか変更を加え、数日間は問題がなかったので、おそらくその問題は解決されているのでしょう。ただし、パフォーマンス カウンターを通じて情報も記録し始めました。IIS の合計リクエスト数は徐々に増加していたものの、その後突然減少していることがわかりました。ただし、RAM は緩やかな増加に対応していませんでした。(青い線は RAM、紫色の線は合計リクエスト数です。)
このリクエストが急増する原因は何でしょうか。また、これを解決するにはどうすればよいですか? アプリ プールのリサイクルですか? リクエストの長さを制限してタイムアウトさせるにはどうすればよいですか。これは正しいアプローチですか?
答え1
どの Total Request カウンターですか? 名前だけを見ると、Total Requests はそのアプリによって処理されるリクエストの合計数です。
だから、それはずっと成長するでしょう。
AppDomain のリサイクル (プロセス内) または App Pool のリサイクル (w3wp プロセスの終了) のいずれかによってカウンターがリセットされる可能性があります。
一般的なアドバイスとしては:
- コンパイルdebug=trueで実行しない
- アプリプールのメモリベースのリサイクルトリガーを設定することを検討する
- RAM の使用量が多すぎる場合は、32 ビット アプリ プールを使用して、メモリ使用量を自然に 4 GB 以下に制限することを検討してください (暴走の問題が少なくなります。4 GB の自然なメモリ制限に達したときにプロセスがクラッシュする方が、4 GB を丸め誤差と考えるプロセスよりも対処が容易です)。