Linux性能優化 第七章 性能工具:網絡
Linux和其他主流操作系統中的網絡流量被抽象為一系列的硬件和軟件層次。
鏈路層,也就是最低的一層,包含網絡硬件,如以太網設備。在傳送網絡流量時,這一層並不區分流量類型,而僅僅以盡可能快的速度發送和接收數據(幀)。
鏈路層上面是網絡層。這一層使用IP協議和ICMP協議在機器間尋址並路由數據包。IP/ICMP盡其最大努力嘗試在機器之間傳遞數據包,但是它們不能保證數據包是否能真正達到其目的地。
網絡層上面是傳輸層,它定義了TCP和UDP。TCP是可靠的協議,它保證消息通過網絡送達,如果消息無法送達它就會產生一個錯誤。而UDP則一個不可靠的協議,它無法保證信息能夠送達(為了更高的速率)。
最上層是應用層。這一層包含了各種的應用程序。
Linux內核實現或控制的是最低三層(鏈路層、網絡層、傳輸層)。內核可以提供每層的性能統計信息,包括數據流經過每一層的帶寬使用情況信息和錯誤計數信息。
7.1.1 鏈路層的網絡流量
鏈路層,通常是以太網,以幀序列的形式將信息發送到網絡上。即便是其上層次的信息片段大小比幀大很多,鏈路層也會把它們分割為幀,再發送到網絡上。數據幀的最大尺寸叫做最大傳輸單位(MTU)。你可以用網絡配置工具,如ip或者ifconfig來設置MTU、對以太網而言,最大大小一般為1500字節,雖然有些硬件支持巨型幀高達9000字節。MTU的大小對網絡效率有直接的影響。由於每個幀都有一個小容量的頭部,所以MTU越大,傳輸的效率也就越高,但是數據組被損壞或丟棄的幾率就越高。對於清潔的網絡鏈路來說,大尺寸的MTU帶來更好的性能,但是嘈雜的鏈路來說更小的MTU會有更好的性能。因為,當單個幀損壞時,它要重傳的數據更少。
在物理層,幀流經物理網絡,Linux內核可以收集大量有關幀數量和類型不同的統計信息。
l 發送/接收——如果一個幀成功地流入或流出機器,那麽它就會被計為一個已發送或已接收的幀。
l 錯誤——有錯誤的幀(可能是網絡電纜壞了,或者雙工不匹配)
l 丟棄——被丟棄的幀(很可能是因為內存或緩沖區容量小)
l 溢出——由於內核或網卡有過多的幀,因此被網絡丟棄的幀。通常這種情況不應該發生。
l 幀——由於物理問題導致被丟棄的幀。其原因可能是循環冗余校驗(CRC)錯誤或者其他低級別的問題。
l 多播——這些幀不直接尋址到當前系統,而是同時廣播到一組節點。
l 壓縮——一些底層接口,如點對點協議(PPP)設備在把幀發送到網絡上之前,會對其進行壓縮。該值表示的就是被壓縮幀的數量。
7.1.2 協議層網絡流量
對TCP/UDP流量而言,Linux使用套接字/端口來抽象兩臺機器的連接。當與遠程機器連接時,本地應用程序用一個網絡套接字來打開遠程機器的一個端口。如HTTP的80端口,web服務器會監聽80端口上的連接,當發生連接時,web服務器就為web頁面的傳輸設置該連接。
7.2網絡性能工具
7.2.1 mii-tool(媒體無關接口工具)
mii-tool是以太網專用硬件工具,主要用來設以太網設備,但它也可以提供當前相關的設置信息。這個信息,諸如鏈接速度和雙工設置,對於追蹤性能不佳的設備的成因是非常有用的。
第一行的信息告訴我們網絡設備正在使用100baseTx-FD全雙工連接。
7.2.2 ethtool
對比mii-tool,ethtool 的功能更加強大,包含更多的配置選項和設備統計信息。
下圖顯示了eth0的配置信息,顯示該設備支持多種不同速度和鏈接的設置,當前連接的是一個全雙工,1000Mbps的鏈路。
7.2.3 ifconfig(接口配置)
ifconfig的主要工作就是在Linux機器上安裝和配置網絡接口。它還提供了系統中所有的網絡設備的基本性能統計信息。
ifconifg的性能統計信息
RX packets | 設備已接收的數據包數 |
TX packets | 設備已發送的數據包數 |
errors | 發送或者接收時的錯誤數 |
dropped | 發送或者接收時丟棄的數據包數 |
overruns | 網絡設備沒有足夠的緩沖區來發送或者接收一個數據包的次數 |
frame | 底層以太網幀錯誤的數量 |
carrier | 由於鏈路介質故障(如電纜故障)而丟棄的數據包數量 |
在下圖中可以看到eth0一共接收了3.2G的數據,發送了10.6G的數據。該數據是自系統啟動開始計算的,可以用watch觀察數據的變化。
7.2.4 ip
ip命令是用來取代老舊的ifconfig的,ip不僅可以讓你對Linux聯網的各個不同方面進行配置,還可以顯示每個網絡設備的性能統計信息。
和ifconfig類似,ip提供的是自系統啟動以來的數據的匯總。
7.2.5 sar
sar除了能提供鏈路層的網絡性能數據之外,還能提供一些關於傳輸層打開的套接字數量的基本信息。
sar顯示所有網絡設備收發的統計信息
sar顯示套接字的數量
7.2.6 netstat
netstat是一個基本的網絡性能工具,它幾乎出現在所有的Linux設備上。可以用它抽象的信息包括:當前正在使用的網絡套接字的數量和類型,以及有關流入和流出當前系統的UDP和TCP數據包數量的特定接口統計數據。它還能將一個套接字回溯到其特定進程或PID,這在試圖確定哪個應用程序要對網絡流量負責時是很有用的。
每秒都更新一次活躍的tcp連接
顯示系統自啟動以來UDP流量的統計信息:
Linux性能優化 第七章 性能工具:網絡