netstat问题:不能从'netstat -c'输出到nfs挂载

简洁版本:

Netstat工作正常,除非我redirect输出到NFS文件。

不起作用: netstat -c > /nfs/mount/file

作品: netstat > /nfs/mount/file

作品: netstat -c

作品: netstat -c > /tmp/file

症状:空文件,没有错误信息。

这是在Ubuntu 10.10上使用bash

更长的版本:我正在开发一个项目,要求我们在testing执行期间从小型集群(~32个节点)上的所有节点收集iostat和netstat统计信息。 我们已经编写了脚本来为每个节点上的适当标志启动iostat和netstat实例,每个进程写入存储在NFS共享目录中的文件(每个文件名都包含从中写入的主机名)。

iostat脚本工作正常,但是我们看到netstat脚本的一个问题。

由于某种原因,如果我用-c标志启动一个netstat进程,每隔一秒指示一次连续的输出,并将其传递给NFS目录中的一个文件,则会创build一个空文件,并且不会写入任何输出。

如果我在提供NFS存储的服务器上做同样的事情,写入同一个目录(除了在本例中是本地存储),那么每件事情都可以正常工作。 另外,如果我写有问题的主机上的本地文件系统(如/tmp/foo.txt),那么一切都很好。

另外值得注意的是,如果我只是运行“netstat”,没有-c标志,并将其传输到存储在NFS上的文件,那也可以。

所以,netstat的连续输出标志(与iostat的“-t 10”标志不同)与NFS交互的方式似乎有些h </s>。

这个设置中的所有主机都运行Ubuntu 10.10。

那这个呢?

 script -f -c "netstat -c" /nfs/mount/file > /dev/null 

我认为它可能工作,虽然我没有一个NFS服务器方便testing它。

strace显示了我的netstat -c在输出结果之前花费了大量的时间来parsing主机名 – 也许试试netstat -nc > /nfs/foo或者等一会儿再杀它。 我不认为这与NFS有什么关系 – redirect到/tmp/foo时,我得到了相同的长延迟

对于NFS的特定configuration,同步的延迟可能相当大,并且看起来在SIGKILL之后netstat不会刷新它的输出。

15秒左右杀死进程导致一个空的文件,如你所描述的。 我等了很长一段时间(我去喝咖啡),当我回来netstat已经写出来的文件。

你能证实这种行为吗?