天天看點

Linux之性能調優--CPU_記憶體_IO_網絡

作為Linux系統管理者,最主要的工作是優化系統配置,使應用在系統上以最優的狀态運作,但是由于硬體問題、軟體問題、網絡環境等的複雜性 和多變性,導緻對系統的優化變得異常複雜,如何定位性能問題出在哪個方面,是性能優化的一大難題, 本文從系統入手,重點講述由于系統軟、硬體配置不當可能造成的性能問題,并且給出了檢測系統故障和優化性能的一般方法和流程。

1 cpu性能評估

 Cpu是影響Linux性能的主要因素之一,下面先介紹幾個檢視CPU性能的指令。 

1.1 vmstat指令

該指令可以顯示關于系統各種資源之間相關性能的簡要資訊,這裡我們主要用它來看CPU的一個負載情況。

下面是vmstat指令在某個系統的輸出結果:

[[email protected] ~]# vmstat 2 3

  1. procs -----------memory------ ----swap-- -----io---- --system-- -----cpu------
  2. r b swpd  free   buff cache  si so  bi  bo  in   cs  us  sy id  wa st
  3. 0 0  0  162240  8304 67032  0  0  13  21  1007  23  0  1  98  0  0
  4. 0 0  0  162240  8304 67032  0  0  1   0  1010  20  0   1  100  0  0
  5. 0 0  0  162240  8304 67032  0  0  1   1  1009  18  0   1   99  0   0

對上面每項的輸出解釋如下:

◆procs 

  r 表示運作和等待cpu時間片的程序數,這個值如果長期大于系統CPU的個數,說明CPU不足,需要增加CPU。
  b 表示在等待資源的程序數,比如正在等待I/O、或者記憶體交換等。

◆memory

 swpd 表示切換到記憶體交換區的記憶體數量(以k為機關)。如果swpd的值不為0,或者比較大,隻要si、so的值長期為0,這種情況下一般不用擔心,不會影響系統性能。
free 表示目前空閑的實體記憶體數量(以k為機關)
 buff 表示buffers cache的記憶體數量,一般對塊裝置的讀寫才需要緩沖。
 cache

表示page cached的記憶體數量,一般作為檔案系統cached,頻繁通路的檔案都會被cached,      

如果cache值較大,說明cached的檔案數較多,如果此時IO中bi比較小,說明檔案系統效率,比較好。

◆swap

 si 表示由磁盤調入記憶體,也就是記憶體進入記憶體交換區的數量。
 so

表示由記憶體調入磁盤,也就是記憶體交換區進入記憶體的數量。 

一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統記憶體不足。需要增加系統記憶體。

◆IO項顯示磁盤讀寫狀況

 Bi 表示從塊裝置讀入資料的總量(即讀磁盤)(每秒kb)。
 Bo

表示寫入到塊裝置的資料總量(即寫磁盤)(每秒kb)。

這裡我們設定的bi+bo參考值為1000,如果超過1000,而且wa值較大,則表示系統磁盤IO有問題,應該考慮提高磁盤的讀寫性能。

system 顯示采集間隔内發生的中斷數
 in 表示在某一時間間隔中觀測到的每秒裝置中斷數。
 cs 表示每秒産生的上下文切換次數。

上面這2個值越大,會看到由核心消耗的CPU時間會越多。

CPU項顯示了CPU的使用狀态,此列是我們關注的重點。

 us 顯示了使用者程序消耗的CPU 時間百分比。us的值比較高時,說明使用者程序消耗的cpu時間多,但是如果長期大于50%,就需要考慮優化程式或算法。
 sy

顯示了核心程序消耗的CPU時間百分比。Sy的值較高時,說明核心消耗的CPU資源很多。

根據經驗,us+sy的參考值為80%,如果us+sy大于 80%說明可能存在CPU資源不足。

 id 顯示了CPU處在空閑狀态的時間百分比。
 wa 顯示了IO等待所占用的CPU時間百分比。wa值越高,說明IO等待越嚴重,根據經驗,wa的參考值為20%,如果wa超過20%,說明IO等待嚴重,引起IO等待的原因可能是磁盤大量随機讀寫造成的,也可能是磁盤或者磁盤控制器的帶寬瓶頸造成的(主要是塊操作)。

綜上所述,在對CPU的評估中,需要重點注意的是procs項r列的值和CPU項中us、sy和id列的值。

1.2  sar指令

檢查CPU性能的第二個工具是sar,sar功能很強大,可以對系統的每個方面進行單獨的統計,但是使用sar指令會增加系統開銷,不過這些開銷是可以評估的,對系統的統計結果不會有很大影響。

下面是sar指令對某個系統的CPU統計輸出:

[[email protected] ~]# # sar -u 3 5

  1. Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)
  2. 11:41:24 AM CPU %user %nice %system %iowait %steal %idle
  3. 11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83
  4. 11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50
  5. 11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92
  6. 11:41:36 AM all 0.29 0.00 0.13 0.00 0.00 99.58
  7. 11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41
  8. Average: all 0.34 0.00 0.16 0.05 0.00 99.45

對上面每項的輸出解釋如下:

%user 顯示了使用者程序消耗的CPU 時間百分比。
%nice 顯示了運作正常程序所消耗的CPU 時間百分比。
%system 顯示了系統程序消耗的CPU時間百分比。
%iowait 顯示了IO等待所占用的CPU時間百分比
%stea 顯示了在記憶體相對緊張的環境下pagein強制對不同的頁面進行的steal操作 。
%idle 顯示了CPU處在空閑狀态的時間百分比。

  這個輸出是對系統整體CPU使用狀況的統計,每項的輸出都非常直覺,并且最後一行Average是個彙總行,是上面統計資訊的一個平均值。

  需要注意的一點是:第一行的統計資訊中包含了sar本身的統計消耗,是以%user列的值會偏高一點,不過,這不會對統計結果産生多大影響。

  在一個多CPU的系統中,如果程式使用了單線程,會出現這麼一個現象,CPU的整體使用率不高,但是系統應用卻響應緩慢,這可能是由于程式使用單線程的原因,單線程隻使用一個CPU,導緻這個CPU占用率為100%,無法處理其它請求,而其它的CPU卻閑置,這就導緻 了整體CPU使用率不高,而應用緩慢 現象的發生 。

針對這個問題,可以對系統的每個CPU分開查詢,統計每個CPU的使用情況:

[[email protected] ~]#  sar -P 0 3 5

  1. Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
  2. 06:29:33 PM CPU %user %nice %system %iowait %steal %idle
  3. 06:29:36 PM 0 3.00 0.00 0.33 0.00 0.00 96.67
  4. 06:29:39 PM 0 0.67 0.00 0.33 0.00 0.00 99.00
  5. 06:29:42 PM 0 0.00 0.00 0.33 0.00 0.00 99.67
  6. 06:29:45 PM 0 0.67 0.00 0.33 0.00 0.00 99.00
  7. 06:29:48 PM 0 1.00 0.00 0.33 0.33 0.00 98.34
  8. Average: 0 1.07 0.00 0.33 0.07 0.00 98.53

這個輸出是對系統的第一顆CPU的資訊統計,需要注意的是,sar中對CPU的計數是從0開始的,是以,

“sar -P 0 3 5”表示對系統的第一顆CPU進行資訊統計

“sar -P 4 3 5”則表示對系統的第五顆CPU進行統計。依次類推。可以看出,上面的系統有八顆CPU。

1.3 iostat指令

 iostat指令主要用于統計磁盤IO狀态,但是也能檢視CPU的使用資訊,它的局限性是隻能顯示系統所有CPU的平均資訊,看下面的一個輸出:

[[email protected] ~]#  iostat -c

  1. Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
  2. avg-cpu: %user %nice %system %iowait %steal %idle
  3. 2.52 0.00 0.30 0.24 0.00 96.96

 使用了“-c”參數,隻顯示系統CPU的統計資訊,輸出中每項代表的含義與sar指令的輸出項完全相同,不再詳述。

1.4 uptime指令

 uptime是監控系統性能最常用的一個指令,主要用來統計系統目前的運作狀況,輸出的資訊依次為:系統現在的時間、系統從上次開機到現在運作了多長時間、系統目前有多少登陸使用者、系統在一分鐘内、五分鐘内、十五分鐘内的平均負載。看下面的一個輸出:

[[email protected] ~]#  uptime

  1. 18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08

這裡需要注意的是load average這個輸出值,這三個值的大小一般不能大于系統CPU的個數,例如,本輸出中系統有8個CPU,如果load average的三個值長期大于8時,說明CPU很繁忙,負載很高,可能會影響系統性能,但是偶爾大于8時,倒不用擔心,一般不會影響系統性能。相反,如果load average的輸出值小于CPU的個數,則表示CPU還有空閑的時間片,比如本例中的輸出,CPU是非常空閑的。

1.5 本節小結

上面介紹了檢查CPU使用狀況的四個指令,通過這些指令需要了解的是:系統CPU是否出現性能瓶頸,也就是說,以上這些指令隻能檢視CPU是否繁忙,負載是否過大,但是無法知道CPU為何負載過大,因而,判斷系統CPU出現問題後,要結合top、ps等指令進一步檢查是由那些程序導緻CPU負載過大的。引起CPU資源緊缺的原因可能是應用程式不合理造成的,也可能是硬體資源匮乏引起的,是以,要具體問題具體分析,或者優化應用程式,或者增加系統CPU資源。

=========================================================================================

2 記憶體性能評估

記憶體的管理和優化是系統性能優化的一個重要部分,記憶體資源的充足與否直接影響應用系統的使用性能,在進行記憶體優化之前,一定要熟悉linux的記憶體管理機制,這一點我們在前面的章節已經有深入講述,本節的重點是如何通過系統指令監控linux系統的記憶體使用狀況。

2.1 free 指令

free是監控linux記憶體使用狀況最常用的指令,看下面的一個輸出:

[[email protected] ~]# free -m

  1. total used free shared buffers cached
  2. Mem: 8111 7185 925 0 243 6299
  3. -/+ buffers/cache: 643 7468
  4. Swap: 8189 0 8189

 “free –m”表示以M為機關檢視記憶體使用情況,在這個輸出中,我們重點關注的應該是free列與cached列的輸出值,由輸出可知,此系統共8G記憶體,系統空閑記憶體還有925M,其中,Buffer Cache占用了243M,Page Cache占用了6299M,由此可知系統緩存了很多的檔案和目錄,而對于應用程式來說,可以使用的記憶體還有7468M,當然這個7468M包含了Buffer Cache和Page Cache的值。在swap項可以看出,交換分區還未使用。是以從應用的角度來說,此系統記憶體資源還非常充足。

經驗公式:

應用程式可用記憶體/系統實體記憶體>70%時,表示系統記憶體資源非常充足,不影響系統性能,

應用程式可用記憶體/系統實體記憶體<20%時,表示系統記憶體資源緊缺,需要增加系統記憶體,

20%<應用程式可用記憶體/系統實體記憶體<70%時,表示系統記憶體資源基本能滿足應用需求,暫時不影響系統性能。

free指令還可以适時的監控記憶體的使用狀況,使用“-s”參數可以在指定的時間段内不間斷的監控記憶體的使用情況:

下面是對這些數值的解釋:

total:總計實體記憶體的大小。

used:已使用多大。

free:可用有多少。

Shared:多個程序共享的記憶體總額。

Buffers/cached:磁盤緩存的大小。

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第四行就不多解釋了。

差別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的差別。 這兩個的差別在于使用的角度來看,第一行是從OS的角度來看,因為對于OS,buffers/cached 都是屬于被使用,是以他的可用記憶體是16176KB,已用記憶體是3250004KB,其中包括,核心(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

第三行所指的是從應用程式角度來看,對于應用程式來說,buffers/cached 是等于可用的,因為buffer/cached是為了提高檔案讀取的性能,當應用程式需在用到記憶體的時候,buffer/cached會很快地被回收。

是以從應用程式的角度來說,可用記憶體=系統free memory+buffers+cached。

如上例:

2795064=16176+110652+2668236

[[email protected] ~]#  free -b -s 5

  1. total used free shared buffers cached
  2. Mem: 8505901056 7528706048 977195008 0 260112384 6601158656
  3. -/+ buffers/cache: 667435008 7838466048
  4. Swap: 8587149312 163840 8586985472
  5. total used free shared buffers cached
  6. Mem: 8505901056 7526936576 978964480 0 260128768 6601142272
  7. -/+ buffers/cache: 665665536 7840235520
  8. Swap: 8587149312 163840 8586985472
  9. total used free shared buffers cached
  10. Mem: 8505901056 7523987456 981913600 0 260141056 6601129984
  11. -/+ buffers/cache: 662716416 7843184640
  12. Swap: 8587149312 163840 8586985472

  其中,“-b”表示以千位元組(也就是1024位元組為機關)來顯示記憶體使用情況。

2.2 通過watch與free相結合動态監控記憶體狀況

 watch是一個非常有用的指令,幾乎每個linux發行版都帶有這個工具,通過watch,可以動态的監控指令的運作結果,省去手動執行的麻煩。

  可以在watch後面跟上需要運作的指令,watch就會自動重複去運作這個指令,預設是2秒鐘執行一次,并把執行的結果更新在螢幕上。例如:

[[email protected] ~]#  watch -n 3 -d free

  1. Every 3.0s: free Sun Nov 30 16:23:20 2008
  2. total used free shared buffers cached
  3. Mem: 8306544 7349548 956996 0 203296 6500024
  4. -/+ buffers/cache: 646228 7660316
  5. Swap: 8385888 160 8385728

其中,“-n”指定重複執行的時間,“-d”表示高亮顯示變動。

2.3 vmstat指令監控記憶體

vmstat指令在監控系統記憶體方面功能強大,請看下面的一個輸出:

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

  1. r b swpd  free  buff cache   si  so  bi  bo  in   cs   us  sy  id  wa
  2. 0 0 906440 22796 155616 1325496 340 180  2   4   1    4   80  0   10  10
  3. 0 0 906440 42796 155616 1325496 320 289  0   54  1095  287  70  15  0  15
  4. 0 0 906440 42884 155624 1325748 236 387  2  102  1064  276  78  2  5  15

對于記憶體的監控,在vmstat中重點關注的是swpd、si和so行,從這個輸出可以看出,此系統記憶體資源緊缺,swpd占用了900M左右記憶體,si和so占用很大,而由于系統記憶體的緊缺,導緻出現15%左右的系統等待,此時增加系統的記憶體是必須要做的。

2.4 sar -r指令組合

sar指令也可以監控linux的記憶體使用狀況,可以通過“sar –r”組合檢視系統記憶體和交換空間的使用率。請看下面的一個輸出:

[[email protected] ~]#  sar -r 2 3

  1. Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)
  2. 09:57:33 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
  3. 09:57:35 PM 897988 7408556 89.19 249428 6496532 786556 4.71
  4. 09:57:37 PM 898564 7407980 89.18 249428 6496532 784276 4.70
  5. 09:57:39 PM 899196 7407348 89.17 249440 6496520 782132 4.69
  6. Average: 898583 7407961 89.18 249432 6496528 784321 4.70

其中:

Kbmemfree:表示空閑實體記憶體大小;

kbmemused:表示已使用的實體記憶體空間大小;

%memused:表示已使用記憶體占總記憶體大小的百分比;

kbbuffers和kbcached分别表示Buffer Cache和Page Cache的大小,

kbcommit和%commit分别表示應用程式目前使用的記憶體大小和使用百分比。

可以看出sar的輸出其實與free的輸出完全對應,不過sar更加人性化,不但給出了記憶體使用量,還給出了記憶體使用的百分比以及統計的平均值。從%commit項可知,此系統目前記憶體資源充足。

2.5 本節小結

 上面介紹了記憶體監控常用的幾個指令以及一些經驗規則,其實作在的系統在記憶體方面出現的瓶頸已經很少,因為記憶體價格很低,充足的記憶體已經完全能滿足應用程式和系統本身的需要,如果系統在記憶體方面出現瓶頸,很大的可能是應用程式本身的問題造成的。

=========================================================================================

3 磁盤I/O性能評估

 在對磁盤I/O性能做評估之前,必須知道的幾個方面是:

 1、熟悉RAID存儲方式,可以根據應用的不同,選擇不同的RAID方式,例如,如果一個應用經常有大量的讀操作,可以選擇RAID5方式建構磁盤陣列存儲資料,如果應用有大量的、頻繁的寫操作,可以選擇raid0存取方式,如果應用對資料安全要求很高,同時對讀寫也有要求的話,可以考慮raid01存取方式等等。

2、盡可能用記憶體的讀寫代替直接磁盤I/O,使頻繁通路的檔案或資料放入記憶體中進行操作處理,因為記憶體讀寫操作比直接磁盤讀寫的效率要高千倍。

3、将經常進行讀寫的檔案與長期不變的檔案獨立出來,分别放置到不同的磁盤裝置上。

對于寫操作頻繁的資料,可以考慮使用裸裝置代替檔案系統。這裡簡要講述下檔案系統與裸裝置的對比:

使用裸裝置的優點有:

1、資料可以直接讀寫,不需要經過作業系統級的緩存,節省了記憶體資源,避免了記憶體資源争用。

2、避免了檔案系統級的維護開銷,比如檔案系統需要維護超級塊、I-node等。

3、避免了作業系統的cache預讀功能,減少了I/O請求。

使用裸裝置的缺點是:

1、資料管理、空間管理不靈活,需要很專業的人來操作。

 2、其實裸裝置的優點就是檔案系統的缺點,反之也是如此,這就需要我們做出合理的規劃和衡量,根據應用的需求,做出對應的政策。

下面接着介紹對磁盤IO的評估标準。

3.1 sar -d指令組合

 通過“sar –d”組合,可以對系統的磁盤IO做一個基本的統計,例如下面的一個輸出:

[[email protected] ~]#  sar -d 2 3 

Linux 2.6.32.12-0.7-default (ztesuse) 07/30/13 _x86_64_

22:35:26  DEV   tps  rd_sec/s wr_sec/s avgrq-sz avgqu-sz  await  svctm  %util

22:35:28 dev8-0  3.30  0.00    52.75   16.00   0.01    2.67  2.67   0.88

22:35:28  DEV  tps  rd_sec/s  wr_sec/s avgrq-sz avgqu-sz await svctm %util

22:35:30 dev8-0 6.70  0.00    80.45    12.00  0.03  4.67  3.67  2.46

22:35:30 DEV   tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz  await  svctm  %util

22:35:32 dev8-0 0.00  0.00     0.00      0.00  0.00      0.00  0.00   0.00

Average: DEV   tps  rd_sec/s  wr_sec/s  avgrq-sz   avgqu-sz  await  svctm  %util

Average: dev8-0 3.14  0.00     41.81     13.33      0.01   4.00  3.33   1.05

 對上面每項的輸出解釋如下:

DEV 表示磁盤裝置名稱。
tps 表示每秒到實體磁盤的傳送數,也就是每秒的I/O流量。一個傳送就是一個I/O請求,多個邏輯請求可以被合并為一個實體I/O請求。
rd_sec/s 表示每秒從裝置讀取的扇區數(1扇區=512位元組)。
wr_sec/s 表示每秒寫入裝置的扇區數目。
avgrq-sz 表示平均每次裝置I/O操作的資料大小(以扇區為機關)。
avgqu-sz 表示平均I/O隊列長度。
await 表示平均每次裝置I/O操作的等待時間(以毫秒為機關)。
svctm 表示平均每次裝置I/O操作的服務時間(以毫秒為機關)。
%util 表示一秒中有百分之幾的時間用于I/O操作。

Linux中I/O請求系統與現實生活中超市購物排隊系統有很多類似的地方,通過對超市購物排隊系統的了解,可以很快掌握linux中I/O運作機制。比如:

...avgrq-sz類似與超市排隊中每人所買東西的多少。

...avgqu-sz類似與超市排隊中機關時間内平均排隊的人數。

...await類似與超市排隊中每人的等待時間。

...svctm類似與超市排隊中收銀員的收款速度。

...%util類似與超市收銀台前有人排隊的時間比例。

對以磁盤IO性能,一般有如下評判标準:

 正常情況下svctm應該是小于await值的,而svctm的大小和磁盤性能有關,CPU、記憶體的負荷也會對svctm值造成影響,過多的請求也會間接的導緻svctm值的增加。

 await值的大小一般取決與svctm的值和I/O隊列長度以及I/O請求模式,如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統上運作的應用程式将變慢,此時可以通過更換更快的硬碟來解決問題。

 %util項的值也是衡量磁盤I/O的一個重要名額,如果%util接近100%,表示磁盤産生的I/O請求太多,I/O系統已經滿負荷的在工作,該磁盤可能存在瓶頸。長期下去,勢必影響系統的性能,可以通過優化程式或者通過更換更高、更快的磁盤來解決此問題。

3.2 iostat –d指令組合

 通過“iostat –d”指令組合也可以檢視系統磁盤的使用狀況,請看如下輸出:

[[email protected] ~]#  iostat -d 2 3

  1. Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)
  2. Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
  3. sda 1.87 2.58 114.12 6479462 286537372
  4. Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
  5. sda 0.00 0.00 0.00 0 0
  6. Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
  7. sda 1.00 0.00 12.00 0 24

 對上面每項的輸出解釋如下:

Blk_read/s表示每秒讀取的資料塊數。

Blk_wrtn/s表示每秒寫入的資料塊數。

Blk_read表示讀取的所有塊數

Blk_wrtn表示寫入的所有塊數。

這裡需要注意的一點是:上面輸出的第一項是系統從啟動以來到統計時的所有傳輸資訊,從第二次輸出的資料才代表在檢測的時間段内系統的傳輸值。

可以通過Blk_read/s和Blk_wrtn/s的值對磁盤的讀寫性能有一個基本的了解,如果Blk_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優化磁盤或者優化程式,如果Blk_read/s值很大,表示磁盤直接讀取操作很多,可以将讀取的資料放入記憶體中進行操作。對于這兩個選項的值沒有一個固定的大小,根據系統應用的不同,會有不同的值,但是有一個規則還是可以遵循的:長期的、超大的資料讀寫,肯定是不正常的,這種情況一定會影響系統性能。

“iostat –x”組合還提供了對每個磁盤的單獨統計,如果不指定磁盤,預設是對所有磁盤進行統計,請看下面的一個輸出:

[[email protected] ~]# iostat -x /dev/sda 2 3

  1. Linux 2.6.9-42.ELsmp (webserver) 12/01/2008 _i686_ (8 CPU)
  2. avg-cpu: %user %nice %system %iowait %steal %idle
  3. 2.45 0.00 0.30 0.24 0.00 97.03
  4. Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
  5. sda 0.01 12.48 0.10 1.78 2.58 114.03 62.33 0.07 38.39 1.30 0.24
  6. avg-cpu: %user %nice %system %iowait %steal %idle
  7. 3.97 0.00 1.83 8.19 0.00 86.14
  8. Device:rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
  9. sda 0.00 195.00 0.00 18.00 0.00 1704.00 94.67 0.04 2.50 0.11 0.20
  10. avg-cpu: %user %nice %system %iowait %steal %idle
  11. 4.04 0.00 1.83 8.01 0.00 86.18
  12. Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

========================================================================================= 

4.網絡性能評估

 網絡性能的好壞直接影響應用程式對外提供服務的穩定性和可靠性,監控網絡性能,可以從以下幾個方面進行管理和優化。

4.1 通過ping指令檢測網絡的連通性

 如果發現網絡反應 緩慢,或者連接配接中斷,可以通過ping來測試網絡的連通情況,請看下面的一個輸出:

[[email protected] ~]#  ping 10.10.1.254

PING 10.10.1.254 (10.10.1.254) 56(84) bytes of data.

64 bytes from 10.10.1.254: icmp_seq=0 ttl=64 time=0.235 ms

64 bytes from 10.10.1.254: icmp_seq=1 ttl=64 time=0.164 ms

64 bytes from 10.10.1.254: icmp_seq=2 ttl=64 time=0.210 ms

64 bytes from 10.10.1.254: icmp_seq=3 ttl=64 time=0.178 ms

64 bytes from 10.10.1.254: icmp_seq=4 ttl=64 time=0.525 ms

64 bytes from 10.10.1.254: icmp_seq=5 ttl=64 time=0.571 ms

64 bytes from 10.10.1.254: icmp_seq=6 ttl=64 time=0.220 ms

--- 10.10.1.254 ping statistics ---

7 packets transmitted, 7 received, 0% packet loss, time 6000ms

rtt min/avg/max/mdev = 0.164/0.300/0.571/0.159 ms, pipe 2

 在這個輸出中,time值情顯示了兩台主機之間的網絡延時況,如果此值很大,則表示網絡的延時很大,機關為毫秒。在這個輸出的最後,是對上面輸出資訊的一個總結,packet loss表示網絡的丢包率,此值越小,表示網絡的品質越高。

4.2 通過netstat –i組合檢測網絡接口狀況

netstat指令提供了網絡接口的詳細資訊,請看下面的輸出:

[[email protected] ~]#  netstat -i

Kernel Interface table

Iface  MTU  Met RX-OK  RX-ERR  RX-DRP RX-OVR   TX-OK   TX-ERR  TX-DRP TX-OVR   Flg

eth0  1500  0 1313129253  0     0     0   1320686497  0     0    0     BMRU

eth1  1500  0 494902025   0     0     0   292358810   0     0    0     BMRU

lo   16436  0 41901601   0     0     0   41901601    0    0    0     BLRU

對上面每項的輸出解釋如下:

Iface 表示網絡裝置的接口名稱
MTU 表示最大傳輸單元,機關位元組。
RX-OK/TX-OK 表示已經準确無誤的接收/發送了多少資料包。
RX-ERR/TX-ERR 表示接收/發送資料包時産生了多少錯誤。
RX-DRP/TX-DRP 表示接收/發送資料包時丢棄了多少資料包。
RX-OVR/TX-OVR 表示由于誤差而遺失了多少資料包。

Flg表示接口标記,其中:

L:表示該接口是個回環裝置。

B:表示設定了廣播位址。

M:表示接收所有資料包。

R:表示接口正在運作。

U:表示接口處于活動狀态。

O:表示在該接口上禁用arp。

P:表示一個點到點的連接配接。

正常情況下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都應該為0,如果這幾個選項的值不為0,并且很大,那麼網絡品質肯定有問題,網絡傳輸性能也一定會下降。

當網絡傳輸存在問題是,可以檢測網卡裝置是否存在故障,如果可能,可以更新為千兆網卡或者光纖網絡,還可以檢查網絡部署環境是否合理。

4.3 通過netstat –r組合檢測系統的路由表資訊

 在網絡不通,或者網絡異常時,首先想到的就是檢查系統的路由表資訊,“netstat –r”的輸出結果與route指令的輸出完全相同,請看下面的一個執行個體:

[[email protected] ~]#   netstat -r

Kernel IP routing table

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface

10.10.1.0       *               255.255.255.0   U         0   0       0  eth0

192.168.200.0   *               255.255.255.0   U         0   0       0  eth1

169.254.0.0     *               255.255.0.0     U         0   0       0  eth1

default         10.10.1.254     0.0.0.0         UG        0   0       0  eth0

 關于輸出中每項的具體含義,已經在前面章節進行過詳細介紹,這裡不再多講,這裡我們重點關注的是default行對應的值,default項表示系統的預設路由,對應的網絡接口為eth0。

4.4 通過sar –n組合顯示系統的網絡運作狀态

 sar提供四種不同的選項來顯示網絡統計資訊,通過“-n”選項可以指定4個不同類型的開關:DEV、EDEV、SOCK和FULL。DEV顯示網絡接口資訊,EDEV顯示關于網絡錯誤的統計資料,SOCK顯示套接字資訊,FULL顯示所有三個開關。請看下面的一個輸出:

[[email protected] ~]# sar -n DEV 2 3

Linux 2.6.9-42.ELsmp (webserver)        12/01/2008      _i686_  (8 CPU)

02:22:31 PM   IFACE  rxpck/s  txpck/s   rxkB/s  txkB/s  rxcmp/s  txcmp/s  rxmcst/s

02:22:33 PM   lo    31.34    31.34    37.53  37.53   0.00    0.00     0.00

02:22:33 PM   eth0   199.50   279.60    17.29  344.12  0.00    0.00     0.00

02:22:33 PM   eth1   5.47     4.98     7.03   0.36    0.00   0.00      0.00

02:22:33 PM   sit0   0.00    0.00      0.00  0.00    0.00    0.00    0.00

02:22:33 PM   IFACE  rxpck/s  txpck/s  rxkB/s   txkB/s  rxcmp/s  txcmp/s  rxmcst/s

02:22:35 PM   lo    67.66   67.66    74.34    74.34   0.00    0.00    0.00

02:22:35 PM   eth0   159.70  222.39   19.74    217.16  0.00    0.00    0.00

02:22:35 PM   eth1   3.48    4.48    0.44     0.51    0.00   0.00     0.00

02:22:35 PM   sit0   0.00    0.00    0.00     0.00    0.00    0.00    0.00

02:22:35 PM   IFACE  rxpck/s  txpck/s   rxkB/s   txkB/s  rxcmp/s  txcmp/s  rxmcst/s

02:22:37 PM   lo     4.52    4.52    9.25    9.25    0.00    0.00    0.00

02:22:37 PM   eth0   102.51   133.67   20.67    116.14   0.00    0.00    0.00

02:22:37 PM   eth1   27.14    67.34   2.42     89.26    0.00    0.00   0.00

02:22:37 PM   sit0   0.00     0.00    0.00    0.00    0.00     0.00   0.00

Average:     IFACE  rxpck/s  txpck/s   rxkB/s   txkB/s  rxcmp/s  txcmp/s  rxmcst/s

Average:     lo    34.61    34.61    40.48   40.48    0.00    0.00    0.00

Average:     eth0   154.08   212.15    19.23   226.17    0.00   0.00     0.00

Average:     eth1   11.98    25.46     3.30   29.85     0.00   0.00     0.00

Average:     sit0   0.00     0.00     0.00    0.00     0.00   0.00     0.00

對上面每項的輸出解釋如下:

IFACE 表示網絡接口裝置。
rxpck/s 表示每秒鐘接收的資料包大小。
txpck/s 表示每秒鐘發送的資料包大小。
rxkB/s 表示每秒鐘接收的位元組數。
txkB/s 表示每秒鐘發送的位元組數。
rxcmp/s 表示每秒鐘接收的壓縮資料包。
txcmp/s 表示每秒鐘發送的壓縮資料包。
rxmcst/s 表示每秒鐘接收的多點傳播資料包。

通過“sar –n”的輸出,可以清楚的顯示網絡接口發送、接收資料的統計資訊。此外還可以通過“sar -n EDEV 2 3”來統計網絡錯誤資訊等。

4.5 小結

本節通過幾個常用的網絡指令介紹了對網絡性能的評估,事實上,網絡問題是簡單而且容易處理的,隻要我們根據上面給出的指令,一般都能迅速定位問題。解決問題的方法一般是增加網絡帶寬,或者優化網絡部署環境。

 除了上面介紹的幾個指令外,排查網絡問題經常用到的指令還有traceroute,主要用于跟蹤資料包的傳輸路徑,還有nslookup指令,主要用于判斷DNS解析資訊。

轉載于:https://blog.51cto.com/liulihuan/1692771