web-dev-qa-db-ja.com

NFSキャッシュクリーニングコマンド?

NFSクライアント側の属性キャッシングに問題があります。私はいくつかのサーバーを使用しています。1つはNFSサーバーで、他はNFSクライアントサーバーです。

すべてのサーバーはDebian(lenny、Linuxの2.6.26-2-AMD64)で、バージョンは次のとおりです。

 % dpkg -l | grep nfs
ii  libnfsidmap2                        0.20-1                     An nfs idmapping library
ii  nfs-common                          1:1.1.2-6lenny1            NFS support files common to client and server
ii  nfs-kernel-server                   1:1.1.2-6lenny1            support for NFS kernel server

NFSサーバーでは、/ etc/exportsは次のように記述されます。

/export-path   192.168.0.0/255.255.255.0(async,rw,no_subtree_check)

NFSクライアントでは、/ etc/fstabは次のように記述されます。

server:/export-path     /mountpoint   nfs rw,hard,intr,rsize=8192,async 0 0

ご覧のとおり、マルチクライアントアクセスのパフォーマンスには「非同期」オプションが使用されています。ただし、これにより誤ったキャッシュエラーが発生する場合があります。

私は多くのサーバーを保守しているため(マウントオプションを変更するためのそれほど強力な権限を持っていません)、/ etc/exportsや/ etc/fstabを変更したくありません。ユーザー権限でNFSクライアント側の属性キャッシュを「クリーンアップ」するコマンドラインツールがあれば十分だと思います。

そのようなコマンドがあるかどうか教えてください。

おかげで、


「偽キャッシュエラー」とは、

 % ls -l /data/1/kabe/foo                  
ls: cannot access /data/1/kabe/foo: No such file or directory
 % ssh another-server 'touch /data/1/kabe/foo' 
 % ls -l /data/1/kabe/foo
ls: cannot access /data/1/kabe/foo: No such file or directory

時々そのようなケースが起こります。 NFSはClose-to-Openの一貫性を保証していると言っているので、問題はファイルの内容ではなく、ファイルの属性(= dentries情報)です。

22
Tomoya Kabe

「誤ったキャッシュエラー」の意味によっては、syncを実行すると必要な情報が得られる場合があります。これにより、すべてのファイルシステムバッファがフラッシュされます。

必要に応じて、/proc/sys/vm/drop_cachesを使用して、カーネルのVMキャッシュをクリアすることもできます。

# To free pagecache
echo 1 > /proc/sys/vm/drop_caches

# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches

# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
23
JimB

特定のプロセス内で、ファイルの親ディレクトリに対してopendirおよびclosedirを呼び出すと、NFSキャッシュが無効になります。ジョブスケジューラのプログラミング中にこれを使用しました。とても、とても役に立ちました。それを試してみてください!

6
Erik Aronesty

AFAIK、syncおよびasyncオプションは、属性キャッシュのソースではありません。 Asyncを使用すると、サーバーはサーバーファイルシステムへのデータの保存を遅延できます。 NFSサーバーに障害が発生した場合の書き込み耐久性に影響しますが、NFSサーバーが安定している場合、asyncはNFSクライアントに影響しません。

lookupcache=positive NFSマウントオプション。ネガティブルックアップキャッシュを防止するために使用される場合があります。ファイルが実際にサーバー上に存在する場合、NFSは「そのようなファイルまたはディレクトリはありません」を返します。見る Directory entry caching in man nfs

4
ArtemGr

NFSの属性キャッシュの効果が表示されています。見る man nfs、チェックアウトDATA AND METADATA COHERENCE

デフォルトでは、NFSは属性を最小30秒(acregminおよびacdirmin)、最大60秒(acregmaxおよびacdirmax)キャッシュします。これらすべてをactimeoでオーバーライドするか、noacで属性キャッシュを完全に無効にすることができます。 noacマウントオプションを使用すると、OPによって記述された動作はなくなりますが、パフォーマンスに影響します。

lookupcache=positiveは、新しいファイルの外観を探しているだけの場合に便利ですが、削除は引き続き属性キャッシュを通過します。

1
Jeff Taylor

nfsサーバー上の/ var/lib/nfs/rmtabファイルをクリアします。

以下のコマンドは、メモリ関連の問題をクリアするために使用されます。そしてそれも非常に危険です。ボックスにホストされているurアプリケーションがクラッシュします

# sync

# To free pagecache
echo 1 > /proc/sys/vm/drop_caches

# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches

# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
0
Bin