ナレッジベース

とみっぺがこれまでのパソメンテサービスの中で
遭遇した顕著なトラブル例について、
現象や解決策などを記録し、
インターネットで共有しています。

TAGS

RECORDS

  • 十分な空きメモリがあるにもかかわらずメモリ不足の状態になる

    現象

    Windows NT、2000、XP において、多くの空きメモリーがあるにもかかわらず、ソフトウェアを多数起動している場合などに、次の現象が発生し、メモリ不足のような状態に陥ることがあります。

    なお、以下で言う「オブジェクト」とは、デスクトップ上に表示されるウィンドウ・ボタン・メニュー・アイコンなどのあらゆる要素を指します。

    • 表示されるべきオブジェクトが出てこない
    • オブジェクトは表示されるが、次のような現象が発生し、正常に動作しない
      • メニュー項目などに意味不明の文字列が表示される
      • メニュー項目・ボタンなどをクリックしても全く何も起こらない
      • メニュー項目・ボタンなどをクリックすると、メモリ不足で処理を続行できない旨のメッセージが表示される
    • そのプログラムが突然アプリケーションエラーで強制終了する

    しかしながら、起動中のプログラムを終了すると、残りのプログラムが正常に動作することもあります。

    原因

    Windows システムの「デスクトップアプリケーションのヒープ」が不足しているためです。これはWindows システムがあらゆる(ユーザーモードの)プログラムのオブジェクトを描画する際に使用するために割り当てた特別なメモリー空間で、その容量はシステムの設定により固定されています。

    対処方法

    このトラブルが発生した際、尋常ではない数のプログラムを起動していたなど、普段では考えられないケースである場合は、問題ありません。普段からあまりに多くのプログラムを起動しないようにしてください。

    しかし、普段の作業中にこのエラーが頻繁に発生するなど、明らかにヒープの容量が不足している場合は、レジストリの値を変更し、ヒープの容量を増やしてください。

    その方法は、以下の通りです。

    1. レジストリエディタを起動する
      • スタート(C) → ファイル名を指定して実行(C) → 「regedit」と入力 → OK(C)
    2. 次のレジストリキーを開く
      HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerSubSystems
    3. 「Windows」の値のうち、以下の赤字の部分の値を変更する
      %SystemRoot%system32csrss.exe ObjectDirectory=Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:GdiServerDllInitialization,4 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16
    4. レジストリエディタを終了し、再起動する
    [注意点]
    • レジストリの変更は、手順を誤るとシステムの誤作動をもたらし、最悪の場合システムの初期化・再インストールを余儀なくされることがありますので、自己責任のもと、注意して行ってください。
    • 「デスクトップアプリケーションのヒープ」の容量をみだりに増やすと、システムの動作に重大な影響を及ぼします。増やす場合は以下の要領で行うことをお薦めします。
      • 512の倍数ずつ
      • 現在の値の最大2倍まで
    • この値の標準値はOSのバージョンによって異なります。
      NT 3.1、2000、XP
      3072(KB)
      NT 3.5
      512(KB)

    インデックスに戻る