技巧 7:檢查帶寬
設想:公司 A 有一個名為 ginger 的存儲服務器,并通過名為 beckham 的客戶端節點裝載 NFS。公司 A 確定他們需要從 ginger 得到更多的帶寬,因為有大量的節點需要 NFS 裝載 ginger 的共享文件系統。
實現此操作的最常用和最便宜的方式是將兩個吉比特以太網 NIC 組合在一起。這是最便宜的,因為您通常會有一個額外的可用 NIC 和一個額外的端口。
所以采取此這個方法。不過現在的問題是:到底需要多少帶寬?
吉比特以太網理論上的限制是 128MBit/s。這個數字從何而來?看看這些計算:
1Gb = 1024Mb;1024Mb/8 = 128MB;"b" = "bits,"、"B" = "bytes"
但實際看到的是什么呢,有什么好的測量方法呢?我推薦一個工具 iperf?梢园凑找韵路椒ǐ@得 iperf:
# wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz
需要在 ginger 和 beckham 均可見的共享文件系統上安裝此工具,或者在兩個節點上編譯并安裝。我將在兩個節點均可見的 bob 用戶的主目錄中編譯它:
tar zxvf iperf*gz
cd iperf-2.0.2
./configure -prefix=/home/bob/perf
make
make install
在 ginger 上,運行:
# /home/bob/perf/bin/iperf -s -f M
這臺機器將用作服務器并以 MBit/s 為單位輸出執行速度。
在 beckham 節點上,運行:
# /home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60
兩個屏幕上的結果都指示了速度是多少。在使用吉比特適配器的普通服務器上,可能會看到速度約為 112MBit/s。這是 TCP 堆棧和物理電纜中的常用帶寬。通過以端到端的方式連接兩臺服務器,每臺服務器使用兩個聯結的以太網卡,我獲得了約 220MBit/s 的帶寬。
事實上,在聯結的網絡上看到的 NFS 約為 150-160MBit/s。這仍然表示帶寬可以達到預期效果。如果看到更小的值,則應該檢查是否有問題。
我最近碰到一種情況,即通過連接驅動程序連接兩個使用了不同驅動程序的 NIC。這導致性能非常低,帶寬約為 20MBit/s,比不連接以太網卡時的帶寬還!
![]() ![]() |
![]()
|
技巧 8:命令行腳本和實用程序
Linux 系統管理員通過使用權威的命令行腳本會變得更高效。這包括巧妙使用循環和知道如何使用 awk
、grep
和 sed
等的實用程序解析數據。通常這可以減少擊鍵次數,降低用戶出錯率。
例如,假設需要為即將安裝的 Linux 集群生成一個新的 /etc/hosts 文件。一般的做法是在 vi 或文本編輯器中添加 IP 地址。不過,可以通過使用現有 /etc/hosts 文件并將以下內容追加到此文件來實現。在命令行上運行:
# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);
done >>/etc/hosts
200 個主機名(n001 到 n200)將由 IP 地址(192.168.99.1 到 192.168.99.200)來創建。手動填充這樣的文件有可能會創建重復的 IP 地址或主機名,因此這是使用內置命令行消除用戶錯誤的好例子。請注意,這是在 bash shell(大多數 Linux 發行版的默認值)內完成的。
再舉一個例子,假設要檢查 Linux 集群中的各個計算節點中的內存大小是否一樣。通常,擁有一個發行版或類似的 shell 是最好的。但是為了演示,以下使用 SSH。
假設 SSH 設置為不使用密碼驗證。然后運行:
# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';
done | sort | uniq
這樣的命令行相當簡潔。(如果在其中放入正則表達式情況會更糟)。讓我們對它進行細分,詳細討論各部分。
首先從 001 循環到 200。使用 seq
命令的 -w
選項在前面填充 0。然后替換 num
變量,創建通過 SSH 連接的主機。有了目標主機后,向它發出命令。本例中是:
free -m | grep Mem | awk '{print $2}'
這個命令的意思是:
- 使用
free
命令獲取以兆字節為單位的內存大小。 - 獲取這個命令的結果,并使用
grep
獲取包含字符串Mem
的行。 - 獲取那一行并使用
awk
輸出第二個字段,它是節點中的總內存。
在每個節點上執行這個操作。
在每個節點上執行命令后,200 個節點的整個輸出就傳送(|
d)到 sort
命令,以對所有內存值進行排序。
最后,使用 uniq
命令消除重復項。這個命令會導致以下情況中的一種:
- 如果所有節點(n001 到 n200)擁有相同的內存大小,則只顯示一個數字。這個數字就是每個操作系統看到的內存大小。
- 如果節點內存大小不同,將會看到幾個內存大小的值。
- 最后,如果某個節點上的 SSH 出現故障,則會看到一些錯誤消息。
這個命令并不是完美無缺的。如果發現與預期不同的內存值,您就不知道是哪一個節點出了問題,或者有多少個節點。為此需要發出另一個命令。
這個技巧提供了一種查看某些內容的快速方式,而且如果發生錯誤,您可以立刻知道。其價值在于快速檢查。
文章來源于領測軟件測試網 http://www.kjueaiud.com/