天天看點

細說Linux系統優化-實踐篇

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

1 cpu性能評估

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

1.1 vmstat指令

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

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

點選(此處)折疊或打開

[root@node1 ~]# vmstat 2 3

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

r b swpd free buff cache si so bi bo in cs us sy id wa st

0 0 0 162240 8304 67032 0 0 13 21 1007 23 0 1 98 0 0

0 0 0 162240 8304 67032 0 0 1 0 1010 20 0 1 100 0 0

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統計輸出:

[root@webserver ~]# sar -u 3 5

Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)

11:41:24 AM CPU %user %nice %system %iowait %steal %idle

11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83

11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50

11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92

11:41:36 AM all 0.29 0.00 0.13 0.00 0.00 99.58

11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41

Average: all 0.34 0.00 0.16 0.05 0.00 99.45

 %user列顯示了使用者程序消耗的CPU 時間百分比。

 %nice列顯示了運作正常程序所消耗的CPU 時間百分比。

 %system列顯示了系統程序消耗的CPU時間百分比。

 %iowait列顯示了IO等待所占用的CPU時間百分比

 %steal列顯示了在記憶體相對緊張的環境下pagein強制對不同的頁面進行的steal操作 。

 %idle列顯示了CPU處在空閑狀态的時間百分比。

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

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

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

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

[root@webserver ~]# sar -P 0 3 5

Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)

06:29:33 PM CPU %user %nice %system %iowait %steal %idle

06:29:36 PM 0 3.00 0.00 0.33 0.00 0.00 96.67

06:29:39 PM 0 0.67 0.00 0.33 0.00 0.00 99.00

06:29:42 PM 0 0.00 0.00 0.33 0.00 0.00 99.67

06:29:45 PM 0 0.67 0.00 0.33 0.00 0.00 99.00

06:29:48 PM 0 1.00 0.00 0.33 0.33 0.00 98.34

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的平均資訊,看下面的一個輸出:

[root@webserver ~]# iostat -c

avg-cpu: %user %nice %system %iowait %steal %idle

2.52 0.00 0.30 0.24 0.00 96.96

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

1.4 uptime指令

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

[root@webserver ~]# uptime

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記憶體使用狀況最常用的指令,看下面的一個輸出:

[root@webserver ~]# free -m

total used free shared buffers cached

Mem: 8111 7185 925 0 243 6299

-/+ buffers/cache: 643 7468

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%時,表示系統記憶體資源非常充足,不影響系統性能,應用程式可用記憶體/系統實體記憶體  free指令還可以适時的監控記憶體的使用狀況,使用“-s”參數可以在指定的時間段内不間斷的監控記憶體的使用情況:

[root@webserver ~]# free -b -s 5

Mem: 8505901056 7528706048 977195008 0 260112384 6601158656

-/+ buffers/cache: 667435008 7838466048

Swap: 8587149312 163840 8586985472

Mem: 8505901056 7526936576 978964480 0 260128768 6601142272

-/+ buffers/cache: 665665536 7840235520

Mem: 8505901056 7523987456 981913600 0 260141056 6601129984

-/+ buffers/cache: 662716416 7843184640

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

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

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

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

[root@webserver ~]# watch -n 3 -d free

Every 3.0s: free Sun Nov 30 16:23:20 2008

Mem: 8306544 7349548 956996 0 203296 6500024

-/+ buffers/cache: 646228 7660316

Swap: 8385888 160 8385728

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

2.3 vmstat指令監控記憶體

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

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

r b swpd free buff cache si so bi bo in cs us sy id wa

0 0 906440 22796 155616 1325496 340 180 2 4 1 4 80 0 10 10

0 0 906440 42796 155616 1325496 320 289 0 54 1095 287 70 15 0 15

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”組合檢視系統記憶體和交換空間的使用率。請看下面的一個輸出:

[root@webserver ~]# sar -r 2 3

Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)

09:57:33 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit

09:57:35 PM 897988 7408556 89.19 249428 6496532 786556 4.71

09:57:37 PM 898564 7407980 89.18 249428 6496532 784276 4.70

09:57:39 PM 899196 7407348 89.17 249440 6496520 782132 4.69

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性能做評估之前,必須知道的幾個方面是:

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

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

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

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

使用裸裝置的優點有:

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

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

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

使用裸裝置的缺點是:

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

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

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

3.1 sar -d指令組合

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

[root@webserver ~]# sar -d 2 3

11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00

11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util

11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05

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

Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02

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

 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”指令組合也可以檢視系統磁盤的使用狀況,請看如下輸出:

[root@webserver ~]# iostat -d 2 3

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

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

sda 1.87 2.58 114.12 6479462 286537372

sda 0.00 0.00 0.00 0 0

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”組合還提供了對每個磁盤的單獨統計,如果不指定磁盤,預設是對所有磁盤進行統計,請看下面的一個輸出:

[root@webserver ~]# iostat -x /dev/sda 2 3

2.45 0.00 0.30 0.24 0.00 97.03

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sda 0.01 12.48 0.10 1.78 2.58 114.03 62.33 0.07 38.39 1.30 0.24

3.97 0.00 1.83 8.19 0.00 86.14

Device:rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sda 0.00 195.00 0.00 18.00 0.00 1704.00 94.67 0.04 2.50 0.11 0.20

4.04 0.00 1.83 8.01 0.00 86.18

sda 0.00 4.50 0.00 7.00 0.00 92.00 13.14 0.01 0.79 0.14 0.10

這個輸出基本與“sar –d”相同,需要說明的幾個選項的含義為:

 rrqm/s表示每秒進行merged的讀操作數目。

 wrqm/s表示每秒進行 merge 的寫操作數目。

 r/s表示每秒完成讀I/O裝置的次數。

 w/s表示每秒完成寫I/O裝置的次數。

 rsec/s表示每秒讀取的扇區數。

 wsec/s表示每秒寫入的扇區數。

3.3 vmstat –d組合

 通過“vmstat –d”組合也可以檢視磁盤的統計資料,情況下面的一個輸出:

[root@webserver ~]# vmstat -d 3 2|grep sda

disk- ------------reads------------ ------------writes----------- -----IO------

total merged sectors ms total merged sectors ms cur sec

sda 239588 29282 6481862 1044442 4538678 32387680 295410812 186025580 0 6179

sda 239588 29282 6481862 1044442 4538680 32387690 295410908 186025581 0 6179

這個輸出顯示了磁盤的reads、writes和IO的使用狀況。

3.4 本節小結

 上面主要講解了對磁盤I/O的性能評估,其實衡量磁盤I/O好壞是多方面的,有應用程式本身的,也有硬體設計上的,還有系統自身配置的問題等,要解決I/O的瓶頸,關鍵是要提高I/O子系統的執行效率。例如,首要要從應用程式上對磁盤讀寫進行優化,能夠放到記憶體執行的操作,盡量不要放到磁盤,同時對磁盤存儲方式進行合理規劃,選擇适合自己的RAID存取方式,最後,在系統級别上,可以選擇适合自身應用的檔案系統,必要時使用裸裝置提高讀寫性能。

4 網絡性能評估

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

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

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

[root@webserver ~]# 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指令提供了網絡接口的詳細資訊,請看下面的輸出:

[root@webserver ~]# 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 LRU

 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指令的輸出完全相同,請看下面的一個執行個體:

[root@webserver ~]# 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顯示所有三個開關。請看下面的一個輸出:

[root@webserver ~]# sar -n DEV 2 3

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解析資訊。

繼續閱讀