網路效能評估(六)

紫翼龍王夜發表於2015-04-08

網路效能評估

 網路是所有子系統中最難監測的一個, 因為網路比較抽象, 在監測時有很多在系統可控制之外的因素如延遲,衝突,擁塞和丟包等對監測產生影響。下面將討論的是乙太網、IP、TCP 的效能監測。

1)乙太網配置設定

除非有明確的設定, 所有乙太網的速度都是自動協商的, 這很大程度上是由於歷史原因造成的,早些時候一個網路裡經常有不同網速和雙工模式的網路裝置。
大多數企業乙太網是 100BaseTX 或 1000BaseTX,可以使用 ethtool 工具來判斷一個系統的網速。

下面的示例中一個擁有 100BaseTX 網路卡的機器工作在 10BaseTX 下:
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes
下面將其強制設定為 100BaseTX 模式:
# ethtool -s eth0 speed 100 duplex full autoneg off
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: No
Speed: 100Mb/s

2)網路吞吐量監測
監測網路吞吐量最好的辦法是在兩個系統之間傳送流量並統計其延遲和速度。

3)使用 iptraf 監測本地吞吐量
iptraf 工具可提供乙太網卡的吞吐量情況:
# iptraf -d eth0


上面的資料顯示被測試系統正以 61mbps(7.65M)頻率傳送資料,相比於 100mbps 網路這有點低。


4)使用 netperf 監測遠端吞吐量
與 iptraf 的動態監測不一樣的是 netperf 使用可控方式測試網路, 這一點對測試一個客戶端到一個高負載伺服器之間的吞吐量很有幫助,netperf 工具是以 C/S 模式執行。
首先需要在伺服器上執行 netperf 服務端:

server# netserver
Starting netserver at port 12865
Starting netserver at hostname 0.0.0.0 port 12865 and family AF_UNSPEC

netperf 可以執行多種測試,最基本的是標準測試:

client# netperf -H 192.168.1.215 -l 30
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.230 (192.168.1.230) port 0 AF_INET
Recv Send Send
Socket Socket  Message Elapsed
Size Size SizeTimeThroughput
bytes bytes bytessecs.10^6bits/sec
87380 16384 1638430.0289.46

輸出顯示吞吐量在 89mbps 左右,伺服器和客戶端在同一網段。從一個 10 跳的 54G 無線網進行測試只能達到 14mbps 左右:
client# netperf -H 192.168.1.215 -l 30
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.215 (192.168.1.215) port 0 AF_INET
Recv  Send   Send
Socket  Socket Message Elapsed
Size  Size   Size  Time   Throughput
bytes  bytes   bytes  secs.   10^6bits/sec
87380  16384   16384  30.10   14.09
從 50 跳距離區域網測試:
# netperf -H 192.168.1.215 -l 30
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.215 (192.168.1.215) port 0 AF_INET
Recv Send Send
Socket Socket  Message Elapsed
Size Size SizeTimeThroughput
bytes bytes bytessecs.10^6bits/sec
87380 16384 1638430.645.05

從外網測試:
# netperf -H litemail.org -p 1500 -l 30
litemail.org (72.249.104.148) port 0 AF_INET
Recv Send Send
Socket Socket  Message Elapsed
Size Size SizeTimeThroughput
bytes bytes bytessecs.10^6bits/sec
87380 16384 1638431.580.93


另外一個有用的測試模式是測試 TCP 請求應答速率, 其原理是建立一個 TCP 連線併傳送多個請求:
client# netperf -t TCP_RR -H 192.168.1.230 -l 30
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to 192.168.1.230 (192.168.1.230) port 0 AF_INET
Local /Remote
Socket Size Request Resp. ElapsedTrans.
Send Recv SizeSizeTimeRate
bytes Bytes bytesbytessecs.per sec
16384 87380 1130.00 4453.80
16384 87380

資料顯示網路可支援 4453 左右的 psh/ack 每秒,因為傳送包的大小隻有 1k。下面使用 2k的請求和 32k 的應答:
client# netperf -t TCP_RR -H 192.168.1.230 -l 30 -- -r 2048,32768
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.230 (192.168.1.230) port 0 AF_INET
Local /Remote
Socket Size RequestResp.ElapsedTrans.
Send Recv SizeSizeTimeRate
bytes Bytes bytesbytessecs.per sec
16384 87380 20483276830.00222.37
16384 87380

可以看到速率已經降到 222 左右。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


1)透過ping命令檢測網路的連通性

2)透過netstat –i組合檢測網路介面狀況

3)透過netstat –r組合檢測系統的路由表資訊

4)透過sar –n組合顯示系統的網路執行狀態 



l  netstat -antl  檢視所有tcp status

注意:可以透過netstat檢視是否timewait過多的情況,導致埠不夠用,在短連線服務中且大併發情況下,要不繫統的net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle兩個選項開啟,允許埠重用。具體這兩個屬性如何用,移步線上/etc/sysctl.conf檔案配置,有註釋。


sar檢視網路卡效能:sar -n DEV 1 100

Linux 2.6.32-431.20.3.el6.x86_64 (iZ25ug3hg9iZ)         09/18/2014      _x86_64_        (4 CPU)

04:01:23 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:01:24 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:01:24 PM      eth0      4.04      0.00      0.16      0.00      0.00      0.00      0.00
04:01:24 PM      eth1     26.26      0.00      1.17      0.00      0.00      0.00      0.00


各列含義:

IFACELAN介面

rxpck/s每秒鐘接收的資料包

txpck/s每秒鐘傳送的資料包

rxbyt/s每秒鐘接收的位元組數

txbyt/s每秒鐘傳送的位元組數

rxcmp/s每秒鐘接收的壓縮資料包

txcmp/s每秒鐘傳送的壓縮資料包

rxmcst/s每秒鐘接收的多播資料包

其實中間的IFACELAN bond0是虛擬裝置。在RH中,多個物理網路卡幫定為一個邏輯bonding裝置,透過把多個物理網路卡幫定為一個邏輯裝置,可以實現增加頻寬吞吐量,提供冗餘。如何進行虛擬化和模式選擇,請參考下面兩篇文章。

7、監控利器

 dstat是一個用來替換vmstat,iostat netstat,nfsstatifstat這些命令的工具, 是一個全能系統資訊統計工具.它是由Python編寫的, 與sysstat相比,dstat是以一個彩色的介面動態顯示,這樣資料比較顯眼,容易觀察,一目瞭然; 而且dstat支援即時重新整理,可以使用相關引數指定顯示哪些內容!下後會有說明。下面開始進入dstat的神秘世界!!!!!!!!!!!!!!官方站點:

nginx+php-fpm的併發處理能力計算:

php-fpm程式執行時間=t ms

伺服器cpu函式=n

併發執行能力qps= 1s/t * 1000 *n.

如果平均php-fpm程式執行時間10ms, cpu=4核。 併發處理能力=1/10 × 1000 ×4= 400.


QPS = req/sec = 請求數/秒

QPS計算PV和機器的方式】

QPS統計方式 [一般使用 http_load 進行統計]
QPS = 總請求數 / ( 程式總數 *   請求時間 )
QPS: 單個程式每秒請求伺服器的成功次數

單臺伺服器每天PV計算
公式1:每天總PV = QPS * 3600 * 6
公式2:每天總PV = QPS * 3600 * 8

伺服器計算
伺服器數量 =   ceil( 每天總PV / 單臺伺服器每天總PV )

【峰值QPS和機器計算公式】

原理:每天80%的訪問集中在20%的時間裡,這20%時間叫做峰值時間
公式:( 總PV數 * 80% ) / ( 每天秒數 * 20% ) = 峰值時間每秒請求數(QPS)
機器:峰值時間每秒QPS / 單臺機器的QPS   = 需要的機器

問:每天300w PV 的在單臺機器上,這臺機器需要多少QPS?
答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

問:如果一臺機器的QPS是58,需要幾臺機器來支援?
答:139 / 58 =

注意:如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。

          如果si,so 長期不等於0,表示記憶體不足。

          如果disk 經常不等於0, 且在 b中的佇列大於3, 表示 io效能不好。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30129545/viewspace-1546807/,如需轉載,請註明出處,否則將追究法律責任。

相關文章