社内のファイル共有環境で、特定のパソコン(Windows XP)からWindows 7の共有フォルダにアクセスできなくなるトラブルが発生しました。
私のPC(Windows Vista / 7)からは問題なくアクセスできるのですが、なぜかXPユーザーだけが弾かれてしまう…。
しかも、サーバー機(Windows 7)を再起動すると直るものの、数時間経つとまた見られなくなるという厄介な症状です。
今回は、この現象の原因とレジストリによる解決方法をメモしておきます。
原因:非ページプール割り当ての制限(イベントID 2017)
サーバー側(Windows 7)のイベントビューアを確認したところ、システムログに以下のエラーが大量に記録されていました。
エラーメッセージ
非ページ プール割り当ての制限に達したため、サーバーはシステムの非ページ プールから割り当てることができませんでした。
(イベントID: 2017 / ソース: srv)
なぜ起きるのか?
調べてみると、これはWindows 7(およびVista)のファイル共有プロトコル(SMB)において、同時に割り当てられるリソースの上限を超えてしまったために発生するようです。
Windows 7はデスクトップOSですが、ファイルサーバーとして酷使(十数人が同時アクセスなど)すると、デフォルトの設定値ではメモリ管理の制限に引っかかってしまうのです。
解決策:レジストリでSMBの上限値を増やす
この問題を解決するには、レジストリを編集して、SMB(LanmanServer)のパラメータを調整する必要があります。
※注意: レジストリ操作はシステムに重大な影響を与える可能性があります。慎重に作業を行ってください。
手順
- レジストリエディタの起動
- [スタート] ボタンをクリックし、検索ボックスに
regeditと入力してEnterキーを押します。
- [スタート] ボタンをクリックし、検索ボックスに
- 対象のキーへ移動
- 左側のツリーを辿り、以下の場所まで移動します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- 値の新規作成・修正
- 以下の3つの値を設定します。値が存在しない場合は「新規」→「DWORD (32ビット) 値」で作成してください。
① MaxMpxCt(同時リクエスト数の上限)
- 名前:
MaxMpxCt - 種類: DWORD (32ビット)
- 表記: 10進数
- 値:
255- (XPなど古いクライアントからの同時リクエスト許容量を増やします)
② MaxWorkItems(利用可能な作業項目の上限)
- 名前:
MaxWorkItems - 種類: DWORD (32ビット)
- 表記: 10進数
- 値:
1024- (処理できるバッファの数を増やします)
③ Size(サーバーの最適化サイズ)
- 名前:
Size - 種類: DWORD (32ビット)
- 表記: 10進数
- 値:
3- (1=最小メモリ使用、2=バランス、3=ファイル共有のパフォーマンス優先)
作業完了
値をすべて設定したら、レジストリエディタを終了し、パソコン(Windows 7)を再起動してください。
これで設定が反映され、XPクライアントからも安定して共有フォルダが見られるようになるはずです。
大人数でWindows 7をファイルサーバー代わりに使う場合は、必須の設定と言えそうですね。