У нас есть два сервера Solaris, назовем их Алиса и Боб.
У нас также есть NFS-сервер Solaris, используемый ими обоими, назовем его Чарли.
Алиса записывает в текстовый файл журнала на сервере NFS, который затем читается Бобом, который воздействует на события в этом файле журнала.
Проблема, с которой мы сталкиваемся, заключается в том, что Боб видит обновления файла от Алисы с некоторой задержкой.
Для тестирования я запустил на Алисе:
while [ 0 ]; do echo `date` | tee -a dummy_logfile; sleep 1; done
Это просто записывает вывод из date
каждую секунду в текстовый файл, который хранится на сервере NFS.
Что касается Боба, я делаю:
tail -f dummy_logfile
Я заметил, что Боб видит события с задержкой примерно на 3 секунды. Команда tail -f отобразит лог-строку, затем сделает паузу примерно на 3 секунды, затем выдаст 3-секундные строки журнала, затем еще 3 секунды ничего, затем выдает другой набор и т. Д.
Однако, если на Бобе я делаю:
while [ 0 ]; do cat dummy_logfile ; sleep 1; done
Он мгновенно повторяет каждую строку в dummy_logfile.
Так похоже tail -f
чтение общего ресурса NFS задерживается, но чтение кота через общий ресурс NFS - нет. У меня создалось впечатление, что tail -f
было почти мгновенно.
Есть ли что-нибудь во взаимодействии NFS, буферов, кеша и т.д., что могло бы объяснить такое поведение? Каждая кошка как-то форсирует обновление или что-то в этом роде?
Кроме того, делая tail -f
на Алисе (сервер, генерирующий файл dummy_logfile) кажется почти мгновенным, так что это не похоже на проблему с tail -f
сам.
Ура, Виктор
Я считаю, что tail -f смотрит на атрибуты файла, чтобы определить точку EOF, но атрибуты обычно кэшируются в течение определенного времени в NFS. cat просто передает все байты.
Смонтируйте NFS с опцией «noac». Это отключит кеширование всех атрибутов. По умолчанию атрибуты кэшируются как минимум на 3 секунды, что по совпадению является именно тем, насколько длительной кажется ваша задержка. Вы можете изменить параметр acregmin = x, чтобы установить это значение ниже, но, похоже, вы хотите полностью отключить кеширование.
Предупреждение: это, вероятно, снизит производительность, если вы используете общий ресурс NFS для чего-либо еще.
Дополнительная информация о NFS на странице руководства здесь: http://linux.die.net/man/5/nfs