Ubuntu

netstat 問題:無法將“netstat -c”的輸出通過管道傳輸到 nfs 掛載

  • April 5, 2011

簡潔版本:

Netstat 工作正常,除非我將輸出重定向到 NFS 中的文件。

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

作品:netstat > /nfs/mount/file

作品:netstat -c

作品:netstat -c > /tmp/file

症狀:空文件,沒有錯誤資訊。

這是在 Ubuntu 10.10 上使用 bash

更長的版本:我正在開發一個項目,該項目要求我們在測試執行期間從一個小型集群(約 32 個節點)上的所有節點收集 iostat 和 netstat 統計資訊。我們編寫了腳本來在每個節點上使用適當的標誌啟動 iostat 和 netstat 實例,每個程序都寫入儲存在 NFS 共享上的目錄中的文件(每個文件名都包含寫入它的主機名)。

iostat 腳本執行良好,但我們發現 netstat 腳本存在問題。

出於某種原因,如果我使用 -c 標誌啟動 netstat 程序,指示每隔一秒連續輸出一次,並將其通過管道傳輸到 NFS 目錄中的文件,則會創建一個空文件,並且不會向其中寫入任何輸出。

如果我在提供 NFS 儲存的伺服器上做同樣的事情,寫入同一個目錄(在這種情況下它是本地儲存除外),那麼一切都很好。此外,如果我寫入主機上的本地文件系統有問題(如 /tmp/foo.txt),那麼一切都很好。

另外值得注意的是,如果我只執行“netstat”,不帶 -c 標誌,並將其通過管道傳輸到儲存在 NFS 上的文件,那也可以。

因此,netstat 的連續輸出標誌似乎有點奇怪,它與 NFS 互動的方式不同於其他工具連續輸出(如 iostat 的“-t 10”標誌)。

此設置中的所有主機都執行 ubuntu 10.10。

那這個呢?

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

我認為它可能會起作用,儘管我沒有方便的 NFS 伺服器來測試它。

strace 顯示我的 netstat -c 在輸出結果之前花費了大量時間解析主機名 - 可能netstat -nc > /nfs/foo在殺死它之前嘗試或等待更長時間。我不認為這與 NFS 有任何關係 - 重定向到時我得到同樣長的延遲/tmp/foo

引用自:https://serverfault.com/questions/255688