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つのファイルのキャッシュを強制的にフラッシュさせるコマンドはありますか?
これらの項目を確認して、何か効果があるかどうかを確認してください。
クライアント上、/etc/fstab
行のoptions列でcto
オプションをまだ使用していない場合NFSファイルシステムの場合は、追加します。 cto
は、nfsクライアントにclose-to-openでファイルを開くように指示します。これにより、ファイルを開くたびにファイルが更新されます。
サーバー上、sync
ではなくasync
オプションを使用してファイルシステムがエクスポートされていることを確認します。同期書き込みでは、ファイルが閉じられるとクライアントはディスクにフラッシュします。 (またはnfs V3では、commit()が行われるたびに)。そのようにするとパフォーマンスが低下する可能性がありますが、NFSファイルシステムへの書き込みを行う場合は、sync
を設定する必要があります。
そのstackoverflowポストに続いて、O_DIRECTでファイルを開くことは、カーネルがCONFIG_NFS_DIRECTIOでコンパイルされている場合にのみ機能します。
また、httpd.confファイルに次の設定があることを確認してください。
EnableMMAP off
EnableSendfile off
Apacheパフォーマンスチューニングドキュメントから:
特定のプロセス内で、ファイルの親ディレクトリに対してopendirおよびclosedirを呼び出すと、NFSキャッシュが無効になります。ジョブスケジューラのプログラミング中にこれを使用しました。とても、とても役に立ちました。それを試してみてください!