十分な空きメモリがあるにもかかわらずメモリ不足の状態になる
2005年08月20日
問題
Windows NT、2000、XP において、多くの空きメモリーがあるにもかかわらず、ソフトウェアを多数起動している場合などに、次の現象が発生し、メモリ不足のような状態に陥ることがあります。
なお、以下で言う「オブジェクト」とは、デスクトップ上に表示されるウィンドウ・ボタン・メニュー・アイコンなどのあらゆる要素を指します。
- 表示されるべきオブジェクトが出てこない
- オブジェクトは表示されるが、次のような現象が発生し、正常に動作しない
- メニュー項目などに意味不明の文字列が表示される
- メニュー項目・ボタンなどをクリックしても全く何も起こらない
- メニュー項目・ボタンなどをクリックすると、メモリ不足で処理を続行できない旨のメッセージが表示される
- そのプログラムが突然アプリケーションエラーで強制終了する
しかしながら、起動中のプログラムを終了すると、残りのプログラムが正常に動作することもあります。
原因
Windows システムの「デスクトップアプリケーションのヒープ」が不足しているためです。これはWindows システムがあらゆる(ユーザーモードの)プログラムのオブジェクトを描画する際に使用するために割り当てた特別なメモリー空間で、その容量はシステムの設定により固定されています。
解決策
このトラブルが発生した際、尋常ではない数のプログラムを起動していたなど、普段では考えられないケースである場合は、問題ありません。普段からあまりに多くのプログラムを起動しないようにしてください。
しかし、普段の作業中にこのエラーが頻繁に発生するなど、明らかにヒープの容量が不足している場合は、レジストリの値を変更し、ヒープの容量を増やしてください。
その方法は、以下の通りです。
- レジストリエディタを起動する
- スタート(C) → ファイル名を指定して実行(C) → 「regedit」と入力 → OK(C)
- 次のレジストリキーを開く
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
- 「Windows」の値のうち、以下の赤字の部分の値を変更する
%SystemRoot%\system32\csrss.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
- レジストリエディタを終了し、再起動する
参考記事・関連リンク
備考
- レジストリの変更は、手順を誤るとシステムの誤作動をもたらし、最悪の場合システムの初期化・再インストールを余儀なくされることがありますので、自己責任のもと、注意して行ってください。
- 「デスクトップアプリケーションのヒープ」の容量をみだりに増やすと、システムの動作に重大な影響を及ぼします。増やす場合は以下の要領で行うことをお薦めします。
- この値の標準値はOSのバージョンによって異なります。
- NT 3.1、2000、XP
- 3072(KB)
- NT 3.5
- 512(KB)
投稿者 とみっぺ : 2005年08月20日 22:39
トラックバック
このエントリーのトラックバックURL:
http://tomippe.jp/mt/mt-tb.cgi/19