none
IIS6.0で複数のサイトが構成されている場合、サイトごとのメモリ使用量を把握する方法を教えて下さい。 RRS feed

  • 質問

  • 下記Webサーバーに対して、サイトが複数立っている状況です。

    そのサイトの中で6サイトにおいて、

    「'System.OutOfMemoryException' の例外がスローされました。」というエラーが発生している状況です。

    エラーの頻度、タイミングが断定出来ず、上記エラー発生時に、IISを手動でリサイクルすることにより障害対応している状況です。

    下記URLのサポート情報に基づくと、メモリ不足が原因と考えられますが、具体的にどのサイトがメモリをいくら使用しているかが分からない為、サイトを改善しようにも効果が測定出来ずに困っております。

    つきましては、サイト毎のメモリ使用状況を確認する方法を教えていただけますか?

    尚、実行環境での現象が発生し、テスト検証環境では現象が発生しません。

    つきましては、恐縮ではございますが、サーバー負荷ができるだけ少ない方法をご教授下さい。

    参考URL:http://support.microsoft.com/kb/954830/ja

    【サーバースペック】

    OS:Windows2003R2 Standard Edition SP2

    CPU:Xeon 2.53Ghz

    メモリ:2.0GB

    IISバージョン:5.2 R2(ビルド 3790.svr03_sp2_gdr070304-2240:Service Pack 2)

    サイト状況

     IISアプリケーションプール

     -_DefaultAppPool(Framework2.0)  19サイト中障害1サイト

      |_Framework2  1サイト中障害なし  |_Framework4 7サイト中障害5サイト

    以上、宜しくお願い致します。

    2014年10月16日 0:52

回答

  • 通常はアプリケーションプールごとにワーカープロセスが起動するので、1 つのアプリケーションプールを複数のサイトで使用している場合はサイトごとのメモリ使用量を知るのは通常では不可能では?
    メモリのダンプを取って内容を精査するような極論を考えればサイトごとの使用量を調べられないことも無いのでしょうけれど、とても現実的とは言えないかと思います。

    アプリケーションプールごとのメモリ使用量であれば、タスクマネージャーや Process Monitor で確認できます。
    確か通常は、タスクマネージャーのプロセスタブでユーザー名がアプリケーションプール名になっていたかと思いますので、そこからワーカープロセスの区別がついたかと思います。

    Web ガーデンであったりとかアプリケーションプールの実行アカウントを変更したりとか色々できるのでその設定次第でいくらでも話が変わってきてしまいますが、基本的にはアプリケーションプールごとのメモリ使用量をタスクマネージャーで確認する、が手間も負荷も掛からないベースとなる手法かと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク oobaoobaooba 2014年10月17日 0:03
    2014年10月16日 14:27

すべての返信

  • 通常はアプリケーションプールごとにワーカープロセスが起動するので、1 つのアプリケーションプールを複数のサイトで使用している場合はサイトごとのメモリ使用量を知るのは通常では不可能では?
    メモリのダンプを取って内容を精査するような極論を考えればサイトごとの使用量を調べられないことも無いのでしょうけれど、とても現実的とは言えないかと思います。

    アプリケーションプールごとのメモリ使用量であれば、タスクマネージャーや Process Monitor で確認できます。
    確か通常は、タスクマネージャーのプロセスタブでユーザー名がアプリケーションプール名になっていたかと思いますので、そこからワーカープロセスの区別がついたかと思います。

    Web ガーデンであったりとかアプリケーションプールの実行アカウントを変更したりとか色々できるのでその設定次第でいくらでも話が変わってきてしまいますが、基本的にはアプリケーションプールごとのメモリ使用量をタスクマネージャーで確認する、が手間も負荷も掛からないベースとなる手法かと思います。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク oobaoobaooba 2014年10月17日 0:03
    2014年10月16日 14:27
  • ご回答頂き誠にありがとうございました。

    ワーカープロセスで分割し、それ毎に管理、把握する手段が効果的な件、了解致しました。

    早速その方法で検証致します。

    今後共何卒宜しくお願い申し上げます。

    2014年10月17日 0:04
  • CLR系のパフォーマンスカウンタで取れたりしないかなと思いましたが、ちょっと未確認です。

    ASP.NETのパフォーマンスカウンタだとアプリケーション個別のカウンタがあるんですが、CLRのアプリケーションドメイン毎というのはどうなっていたか…

    あ、これはこういう方法があったりするかも、という話であって、基本的にはアプリケーションプールを分ける方が簡単に計測はできだろうとは思います。

    あと、32ビットOSの場合は、ユーザーメモリ空間が狭いため、単一アプリケーションプールだと一つのアプリに使える仮想メモリ空間がかなり小さくなり、メモリエラーが発生しやすくなっている可能性があります。

    ただし、物理メモリのトータル消費量は、アプリケーションプールを分けると確実に増えますので、物理メモリ的には逆に厳しくなるかもしれません。

    見たところ20サイト以上ある感じなんですかね?
    こうなるとやっぱり物理メモリ的にちょっと厳しいかもという気もしなくもないです。

    2014年10月17日 1:14
  • ご回答頂きありがとうございました。

    20サイトが多いというご意見、誠にありがとう御座います。

    その量的感覚がなかったもので、上司に報告が行い易くなります。

    今後共何卒宜しくお願い致します。

    2014年10月20日 8:53