エラー「このコマンドを処理するために必要な記憶域をサーバーで確保できません。」の対処方法についてご報告します。
PCおよびサーバで共有資源へのアクセスするとエラーとなる症状が発生し、対処を依頼された時の記録です。
(管理共有C$や共有設定をしたフォルダ)
おそらく現代の環境ではめったに関係しないと思われますが、レガシな環境では発生することもあると思われます。
以下エラーメッセージ
※\\PCx61で共有しているフォルダwordフォルダへアクセス失敗の例
--------------------------------------------------------
[Window Title]
フォルダーを開く
[Content]
\\PCx61\word にアクセスできません。このネットワーク リソースを使用するアクセス許可がない可能性があります。
アクセス許可があるかどうかこのサーバーの管理者に問い合わせてください。
このコマンドを処理するために必要な記憶域をサーバーで確保できません。
[OK]
--------------------------------------------------------
原因は、WindowsのServerというサービスで利用しているスタックというメモリが不足する場合に発生するエラーのようです。
※ServerサービスはOSがWindows Serverに限らず、Windows ProfessionalでもWindows Homeでも存在するサービスです。
参考:マイクロソフトのサポートオンライン
ウイルス対策ソフトウェアが原因でイベント ID 2011 が発生することがある
http://support.microsoft.com/kb/177078/ja
これを参考に設定を変更し、以下の手順で反映させます。
※レジストリバックアップなどの操作は割愛です。ご自身で。
1) 管理者権限でレジストリエディタを起動(regedit)。
2) 以下のレジストリキーへアクセス
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
3) (IRPStackSizeの項目がない場合には) [編集]-[新規]-[DWORD 値] から、「IRPStackSize」という値を作成。 IRPStackSize を編集し、データとして11よりも大きい数値を記入。(今回は32(10進数で50)を入力)
4) services.mscからServerサービスを選択し再起動する。
⇒依存サービスであるComputer Browserサービスも同時に再起動される。
共有にアクセスするとアクセス可能になりました。
もうちょっと深い解説:
参考:※サポートオンラインより-------------------------------------
IRPStackSize エントリが存在しない場合、デフォルトで値は 15 に設定されます。
値 IRPStackSize を作成した場合は、15 よりも大きな値を入力します。
値は、3 ずつ増やすことをお勧めします。つまり、前の値が 11 の場合は、14 と入力し、[OK] をクリックします。
上記の手順を実行しても、問題が依然として発生する場合は、IRPStackSize の値をさらに大きくします。この値の Windows 2000 での最大値は、50 (16 進数では 0x32) です。
-------------------------------------------------------------------
サポートオンラインの情報によれば、
----------------------------------------
Norton AntiVirus for Windows または IBM AntiVirus 3.01N (Build 301.590) をインストールした後、次のエラー メッセージが表示されます。
このコマンドを処理するのに必要な記憶領域をサーバーで確保できません。
および
トランザクションを完了するために十分なメモリがありません。他のアプリケーションを閉じて、やり直してください。
----------------------------------------
このようにウィルス対策ソフトが原因とされているが、他のSecurity機能(サードパーティー製のPC動作ログ収集やPC利用状況のロガー)でも同様の症状が出るのではないかと考えられます。
------------追記
同じタイミングで別のPCでも発生しました。--------------------------------------------------------------------------------
[Window Title]
フォルダーを開く
[Content]
\\PCt400\c$ にアクセスできません。このネットワーク リソースを使用するアクセス許可がない可能性があります。アクセス許可があるかどうかこのサーバーの管理者に問い合わせてください。
このコマンドを処理するのに必要な記憶域をサーバーで確保できません。
--------------------------------------------------
イベントビューアにも多数のエラーが(たくさん)
内容は、、、
--------------------------------------------------
サーバーの構成パラメーター "irpstacksize" が小さすぎるため、サーバーはローカル デバイスを使用できません。このパラメーターの値を大きくしてください。
--------------------------------------------------
???
同じ、ですよね。きっと。
Microsoft サポートオンラインに解決方法が掲載されています。------------------------------------------------------------------------------------------------
https://support.microsoft.com/ja-jp/kb/106167
(※WindowsNT4.0用の情報だが原理は同じ)
-----------------------------------------------以下抜粋-----------------------------------------------
次の場所にある IRPStackSize のレジストリの値を参照してください。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
\Parameters
この値が明示的に存在しない場合は、デフォルト値 0x4 が使用されます。有効な値の範囲は、0x1 ~ 0xC (1 ~ 12) です。
このパラメータの値が存在しない場合に、その値を増やすには、次のキーに移動します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
\LanmanServer\Parameters
IRPStackSize の値が明示的に存在しない場合は、デフォルトの値 0x4 が使用されます。キーが存在しない場合は、レジストリ エディタで [値の追加] をクリックします。[値の名前] には IRPStackSize を、[データ タイプ] には [REG_DWORD] を指定します。
-----------------------------------------------ここまで-----------------------------------------------
「スタート」→「ファイル名を指定して実行」を選ぶ。 regedit と入力してEnter。レジストリエディタを起動します。
次↓のキーを開く↓
「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters」
IRPstackSize がないため新規作成します。
- 一覧の余白部分で、「右クリック」-「新規」-「DWORD値」
- 「新しい値 #1」の名前を「IRPStackSize」にする。
- 「IRPStackSize」をクリックして、「10進」を選ぶ。
- 値のデータの部分に「15」を入力して「 OK」を押す。
値の設定後Windowsを再起動すると反映されます。
IRPStackSizeを15にしてもエラーが出る場合には…
今回値を基準値の15に設定し再起動をしたが、エラーが再現するという結果になりました。
環境によってはIRPStackSizeを15にしても問題が解決しない場合がある模様なので、15以上に値を増やすようにします。
15でだめなら3づつ増やせばいいらしいが、今回はNT4.0時代での最大値と考えられる32(10進数)で設定し問題を解消しました。
なお、面倒なら50まで一気に引き上げても大丈夫のようです。
一番の根本的な解決策は、レガシ環境を移行することなのは言うまでもありません。