我们有两台Solaris服务器,我们称它们为Alice和Bob。
我们也有一个由他们使用的Solaris NFS服务器,称之为查理。
Alice写入NFS服务器上的文本日志文件,然后由Bob读取该日志文件中的事件。
我们遇到的问题是Bob看到Alice的文件更新有些延迟。
为了testing,我跑了爱丽丝:
while [ 0 ]; do echo `date` | tee -a dummy_logfile; sleep 1; done
这只是将date的输出写出到存储在NFS服务器上的文本文件中。
在鲍勃,我这样做:
tail -f dummy_logfile
我注意到鲍勃看到事件似乎有3秒钟的延迟。 尾巴-f将回显一个logline,然后暂停大约3秒钟,然后它吐出3秒的价值的logging线,然后另外3秒没有,然后输出另一套等
但是,如果在鲍勃我做:
while [ 0 ]; do cat dummy_logfile ; sleep 1; done
它瞬间重复dummy_logfile中的每一行。
所以看起来像tail -f读取NFS共享被延迟了,但是读取NFS共享的猫不是。 我的印象是, tail -f几乎是瞬间的。
在NFS,缓冲区,caching等的交互中是否有任何可以解释这种行为的东西? 每只猫以某种方式强制更新或什么?
此外,在Alice(生成dummy_logfile的服务器)上做一个tail -f似乎是近乎即时的,所以tail -f本身似乎不是问题。
干杯,维克多
我相信tail -f会查看文件的属性来确定EOF点,但是通常在NFS中caching一段时间的属性。 猫只是stream所有的字节。
使用“noac”选项挂载NFS。 这将禁用所有的属性caching。 默认情况下,属性被caching至less3秒,这恰好恰好是你的延迟时间似乎是多久。 您可以修改选项“acregmin = x”来设置较低的值,但是您似乎希望完全禁用caching。
警告:如果您使用NFS共享其他任何东西,这可能会导致性能下降。
更多的NFS信息在这里的手册页: http : //linux.die.net/man/5/nfs