web-dev-qa-db-ja.com

LinuxにNFS共有上の1つのファイルのキャッシュを強制的にフラッシュさせるコマンドはありますか?

StackOverflowに関するこの質問 に関連して、NFSキャッシュをフラッシュする方法、またはNFS共有にあるファイルの最新のコピーをLinuxに表示させる方法があるかどうか疑問に思っています。

4つのApacheサーバーがNFSを介して同じディレクトリをマウントする状況があり、1つのサーバーがファイルに変更を加えると、他のサーバーがその変更を確認するのに約5〜10秒かかります。このウィンドウ内でそのファイルに2番目の変更を加えると、最初の変更が上書きされる可能性があります。

ファイルシステムのfstabエントリは次のとおりです。

172.16.1.15:/home               /media/home     nfs     vers=3,defaults,noauto,sync,acregmin=1          0       0

LinuxにNFS共有上の1つのファイルのキャッシュを強制的にフラッシュさせるコマンドはありますか?

14
Josh

これらの項目を確認して、何か効果があるかどうかを確認してください。

  1. クライアント上/etc/fstab行のoptions列でctoオプションをまだ使用していない場合NFSファイルシステムの場合は、追加します。 ctoは、nfsクライアントにclose-to-openでファイルを開くように指示します。これにより、ファイルを開くたびにファイルが更新されます。

  2. サーバー上syncではなくasyncオプションを使用してファイルシステムがエクスポートされていることを確認します。同期書き込みでは、ファイルが閉じられるとクライアントはディスクにフラッシュします。 (またはnfs V3では、commit()が行われるたびに)。そのようにするとパフォーマンスが低下する可能性がありますが、NFSファイルシステムへの書き込みを行う場合は、syncを設定する必要があります。

  3. そのstackoverflowポストに続いて、O_DIRECTでファイルを開くことは、カーネルがCONFIG_NFS_DIRECTIOでコンパイルされている場合にのみ機能します。

  4. また、httpd.confファイルに次の設定があることを確認してください。

    • EnableMMAP off
    • EnableSendfile off

    Apacheパフォーマンスチューニングドキュメントから:

    • NFSマウントファイルシステムにあるファイルをメモリマップし、別のNFSクライアントマシンのプロセスがファイルを削除または切り捨てた場合、次にマップされたファイルコンテンツにアクセスしようとすると、プロセスでバスエラーが発生する可能性があります。
    • EnableSendfileをオフにしても、NFSの同期/非同期動作には特に役立ちませんが、ApacheをNFSで使用している場合はオフにする必要があります。
12
Tim Kennedy

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

3
Erik Aronesty