2011-11-29 47 views
19

NFSクライアント側の属性キャッシュに問題があります。 私はいくつかのサーバーを使用しています.1つはNFSサーバーで、もう1つはNFSクライアントサーバーです。NFSキャッシュクリーニングコマンド?

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

% 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 

は、/ etc /輸出は以下のように書かれている:

/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 

時々、このようなケースが起こります。 問題はファイルの内容ではなく、ファイル属性(= dentries情報)です。NFSはクローズ・ツー・オープンの一貫性を保証しているからです。

+0

この問題の可能な解決策を調べているうちに、この質問が見つかりました(+1)。 NFSが一貫性を提供できない場合は、ローカルキャッシュを使用しないか、ローカルキャッシュの期限切れ時間を短くするかのどちらかを選択します。ギガビットLANは大きな障害ではないはずなので、パフォーマンスの低下があまり期待できません。理想的な解決策は、サーバがファイルシステムの変更を監視し、キャッシュをフラッシュする必要があるときにクライアントに通知することですが、NFSがこれをサポートしているとは思いません。 – Tronic

+0

ここでは帯域幅は重要ではありませんが、*レイテンシ*であるため、ギガビットLANにはまだパフォーマンスに影響があります。 FWIW、 'lookupcache = none'は' git clone'の時間を2.7秒から20秒に上げました。 –

答えて

18

"誤ったキャッシングエラー"の意味に応じて、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 
+0

ありがとうございます。私は私の質問に「誤ったキャッシングエラー」を意味するものを追加しました。この問題は 'sync'だけで解決されていません。私はあなたの提案コマンドの2番目だと思うので、私は後で試してみます。 –

+0

これはうまくいった!どうもありがとうございます。 –

+1

私は同じ問題を抱えている、特定のフォルダに同期したい、ルートがないと仮定して、提案されたコマンドを実行できないようにする – Zamir

1

nfsサーバー上のclear/var/lib/nfs/rmtabファイル。

以下のコマンドは、メモリ関連の問題を解決するために使用します。それは非常に危険です。 soem時間は、それはボックス

# 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 
3

私の知る限りでホストされているウルアプリケーションがクラッシュします、syncasyncオプションは、属性のキャッシングのソースではありません。 Asyncは、サーバがサーバファイルシステムにデータを保存するのを遅延させる。 NFSサーバーの障害時の書き込み耐久性に影響しますが、NFSサーバーが安定していれば、asyncはNFSクライアントに影響しません。

NFSマウントオプションは、負のルックアップキャッシングを防ぐために使用される可能性があります。そのファイルがサーバー上に実際に存在する場合、NFSは「No such file or directory」を返します。 man nfsDirectory entry cachingを参照してください。

6

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

+0

この提案をありがとう – mob

1

あなたはNFSの属性キャッシュの効果を見ています。 man nfsを参照し、DATA AND METADATA COHERENCEを確認してください。デフォルトのキャッシュによって

NFSは30秒(acregminacdirmin)の最小値と60秒(acregmaxacdirmax)の最大の属性。これらのすべてをactimeoで上書きするか、属性キャッシュ全体をnoacで無効にすることができます。 noacマウントオプションを使用すると、OPで記述された動作はなくなりますが、パフォーマンスは低下します。

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

関連する問題