NFS はディスク入出力処理の多いサービスのため、低速のサーバーは、入出力が問題になることがあります。メモリーを増設し、ファイルシステムキャッシュを大きくすることによって、この入出力の問題は解消します。
システムは、ファイルシステムのページ待ち状態である場合や、スワップデバイスとの間でプロセスイメージをページングしている場合もあります。NFS サービスは、完全にオぺレーティングシステムのカーネル内で動作するため、ページング中にさらにサービスが供給された場合にだけ問題となります。
スワップデバイスで入出力動作が何も行われていない場合は、すべてのページング動作は、NFS 読み取りや書き込み、属性、ルックアップなどのファイル入出力操作に伴います。
NFS サーバーの性能上、ディスクからメモリーへのファイルシステムデータのページングが問題になる場合があります。
vmstat 30 コマンドを実行してスキャンレートを調べます。
スキャンレート (sr、スキャンされたページ数) が毎秒 200 ページを超える場合は、メモリーが不足しています。システムは、再利用可能な未使用ページを探します。再利用可能なページをキャッシュして、NFS クライアントによる再読み取りが行えるようにします。
メモリーを増設します。
メモリーを増設することによって、同じデータが繰り返し読み取られることがなくなり、サーバーのページキャッシュとのやりとりで NFS 要求を処理することができます。NFS サーバーに必要なメモリーの大きさの計算方法については、メモリー容量の計算を参照してください。
最適な性能を得るために必要なメモリー容量は、そのサーバー上で使用されるファイルの大きさの合計値によって異なります。メモリーは、最近読み取られたファイルに対してはキャッシュとして動作します。キャッシュを最も効率的に使用するには、使用するファイルの大きさの合計にできるだけ近い値にします。
メモリーキャッシュ機能が使用されているため、サーバーが長時間アクティブな場合は、NFS サーバーの未使用メモリーが、0.5 MB 〜 1.0 MB の範囲になる場合があります。メモリーを十分に確保することで、複数の要求を問題なく処理することができます。
実際に使用されるファイルは、時間とともに変化しますが、全体として使用されるファイルの大きさは比較的一定です。NFS は、ある一定の監視期間に取り扱うファイルに依存して、アクティブなファイルのスライドウインドウを作成します。
メモリー容量は、一般的なメモリー規則、または条件付きメモリー規則のいずれかの方法に従って求めることができます。
以下の一般的なガイドラインに従って、必要なメモリーの容量を計算します。
仮想メモリー = RAM (メインメモリー) + スワップ領域
5 分規則—メモリーの大きさは、16 MB に、5 分間に 2 回以上アクセスされるデータをキャッシュするためのメモリー容量を加えた値になります。
以下の条件付きのガイドラインに従って、必要なメモリーの容量を計算します。
多くのクライアントにユーザーデータを供給するサーバーの場合は、メモリーを最低限の大きさにする。
小規模なコミュニティーでは 32 MB、大規模なコミュニティーでは 128 MB 程度にします。マルチプロセッサ構成では、1 プロセッサ当たり少なくとも 64 MB を用意します。通常、メモリーから受ける恩恵は、データを扱うことの多いアプリケーションよりも、属性依存のアプリケーションの方が大きくなります。
ファイルを頻繁に使用するアプリケーションに、一時ファイル領域を供給することの多いサーバーの場合は、サーバー上で使用されるアクティブな一時ファイルの大きさの合計の 75 % 程度のメモリー構成にする。
たとえば、各クライアントの一時ファイルの大きさが約 5 MB で、サーバーが完全にアクティブの状態で 20 のクライアントを処理すると予測される場合は、メモリーを以下の大きさにします。
(20 クライアント×5 MB) ÷75 % = 133 MB 簡単にメモリーを構成する場合、最も適当な大きさは 128 MB です。
実行可能なイメージだけを供給することの多いサーバーの場合は、ライブラリを含めて、使用頻度の高いバイナリファイルの合計に等しい大きさのメモリー構成にする。
たとえば、/usr/openwin を供給するためのサーバーには、X サーバー、コマンドツール、libX11.so、libview.so、libXt をキャッシュするのに十分なメモリーをインストールします。この NFS アプリケーションは、あらゆるクライアントに同じファイルを繰り返し供給することを通常の仕事としていて、必要なデータを効果的にキャッシュすることができる、より一般的な /home や /src、あるいはデータサーバーと異なります。クライアントは、すべてのバイナリの全ページを必ず使用するわけではないため、頻繁に使用されるプログラムや、ライブラリを保持するために十分なメモリー構成にするのが妥当です。可能であれば、クライアントで Cachefs を使用し、サーバーに対する負荷と、サーバーで必要となるメモリー容量を減らしてください。
クライアントが DOS PC または Macintosh の場合は、Sun NFS サーバー側のメモリーキャッシュを増設する。
DOS PC や Macintosh システムが行うキャッシュは、UNIX システムのクライアントが行うキャッシュよりも少なくなります。
NFS サーバーはユーザー処理を実行しないため、スワップ領域が必要になることはほとんどありません。
仮想メモリー (メインメモリー + スワップ領域) を最低でも 64 MB の大きさにします (表 3–4 を参照)。
システムに障害が発生したときに障害ダンプを保存できるように、メインメモリーの 50 % を緊急用のスワップ領域として設定します。
表 3-4 必要なスワップ領域
RAM の容量 |
必要なスワップ領域 |
---|---|
16 MB |
48 MB |
32 MB |
32 MB |
64 MB 以上 |
なし |