NFS服务器和延迟使用tail -f?

我们有两台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