我想對我們的 NFS 伺服器進行一些分析,以幫助追蹤應用程式中的潛在瓶頸。伺服器運行 SUSE Enterprise Linux 10。
我想知道的事情是:
- 哪些客戶端正在存取哪些文件
- 每個客戶端的讀取/寫入吞吐量
- 其他 RPC 呼叫造成的開銷
- 等待其他 NFS 請求或磁碟 I/O 來為客戶端提供服務所花費的時間
我已經知道可用的統計數據/proc/net/rpc/nfsd
,事實上我寫了一篇部落格文章深入描述它們。我正在尋找一種更深入挖掘並幫助了解哪些因素影響特定客戶所看到的性能的方法。我想分析 NFS 伺服器在叢集上的應用程式效能中所扮演的角色,以便我可以找到最佳優化它的方法。
答案1
只是一個想法,嘗試用wireshark嗅探nfs流量。可能會告訴您哪個使用者存取了哪個文件:
tshark -R nfs -i eth0
答案2
我必須說,在所有可用的不同 *stat 實用程式中,nfsstat 是迄今為止最差的!它使您能夠查看一堆計數器,但僅此而已。如果您查看它們兩次,您必須嘗試找出每個計數器發生了多少變化,如果您想知道變化率,則需要除以樣本之間的秒數。平心而論,nfsstat 確實可以追溯到很多年前,當時事情還相當粗糙,現在由於沒有人想要改變輸出格式而受到阻礙,因為它可能會破壞很多東西。
至於使用collectl來監視nfs,它確實以更易於閱讀的格式提供nfsstat輸出,但更好的是您可以讓它運行數小時或數天並回放您在後台收集的數據。至於查看進程正在做什麼的請求,collectl 還可以收集進程數據,包括每個進程正在執行多少 I/O,甚至可以回放以顯示最高 I/O 使用者。您也可以即時使用頂級功能。
如果您想觀看磁碟主題本身,collectl 也可以這樣做,並以協調的方式顯示所有內容。
檢查一下...-標記
答案3
收集(尤其是它的NFS子系統)是一個非常好的實用程序,可能對您的分析有用,但它確實不是符合您的要求清單。我不知道有任何 Linux 實用程式可以做到這一點。
(請讓我加這個題外話:有是符合您要求的軟體:Sun 基於 DTrace 的軟體分析(pdf)- 但不幸的是在 Linux 上不可用。你會發現很多很棒的例子布倫丹·格雷格的博客這說明了該工具的功能。
答案4
在我看來,這恰恰凸顯了當今工具的問題。這裡我們至少提到了 3 個,包括 nfsstat、iostat 和 iotop。然後順便提到了wireshare 和nfsreplay。這聽起來真的像是正常的做事方式嗎?除了wireshark 之外,還有一個單獨的類別,您不喜歡1 個工具嗎?
對於開場白來說,雖然我發現 iostat 的輸出非常有用,但數字中的所有 .00 都很難閱讀。 Collectl 報告完全相同的數據,但格式更容易觀察。您已經知道我對 nfsstat 的看法,並且由於 Collectl 可以回放任何數據,因此不需要「重播」實用程式。至於“iotop”,collect 還可以顯示按包含 I/O 的任何內容排序的進程。
因此,您也擁有了所有內容,並帶有時間戳記。如果您需要更精細的監視間隔,您始終可以將採樣時間縮短到0.1 或0.5 秒或之間的任何時間,儘管如果您監視進程如此快,則會產生更多開銷,但使用任何進程監視實用程序都會產生更多開銷。
最後的好處是你用collectl收集的任何東西都可以載入到電子表格中並輕鬆繪製或使用colplot(它是collectl-utils的一部分)。
-標記