В связи с этим вопросом о StackOverflow мне интересно, есть ли способ очистить кэш NFS / заставить Linux увидеть самую последнюю копию файла, находящегося в общей папке NFS.
У меня есть ситуация, когда четыре сервера Apache монтируют один и тот же каталог через NFS, и когда один сервер вносит изменения в файл, другим серверам требуется около 5-10 секунд, чтобы увидеть это изменение. Если в этот файл будет внесено второе изменение, оно может перезаписать первое изменение.
fstab
Запись для файловой системы:
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
Есть ли команда, которая заставит Linux очистить кэш одного файла на NFS-ресурсе?
Ответы:
Проверьте эти элементы и посмотрите, есть ли что-нибудь для вас:
На клиенте , если вы еще не используете
cto
опцию в столбце опций/etc/fstab
строки для вашей файловой системы NFS, добавьте ее.cto
приказывает клиенту nfs открывать файлы с помощью функции close-to-open, что заставляет их обновлять файл всякий раз, когда они его открывают.На сервере убедитесь, что ваша файловая система экспортируется с
sync
опцией, а не сasync
. При синхронной записи клиент будет сброшен на диск при закрытии файла. ( или с помощью nfs V3 всякий раз, когда совершается коммит () ). Таким образом, производительность может снизиться, но если вы делаете запись в файловую систему NFS, вам определенно нужноsync
установить.Следуя по пятам за этим сообщением stackoverflow, открытие файла с помощью O_DIRECT работает, только если ядро было скомпилировано с помощью CONFIG_NFS_DIRECTIO.
Также убедитесь, что в вашем файле httpd.conf есть следующие настройки:
EnableMMAP off
EnableSendfile off
Из документации по настройке производительности Apache:
источник
cto
на клиенте, и я попробую это. У меня нетsync
ниasync
на сервере; Я только добавилsync
.O_DIRECT
мне это не помогло, потому что на самом деле PHP читает эти файлы и не может открыть ихO_DIRECT
так, как я могу найти.Внутри данного процесса вызов opendir и closedir в родительском каталоге файла делает недействительным кэш NFS. Я использовал это при программировании планировщика заданий. Очень, очень полезно. Попытайся!
источник
Если вы откроете данный файл в некэшированной программе (например, vim или emacs), а затем закроете, он обновит / очистит кэш для этого файла.
источник