Linux系統優化

     做爲一名linux系 統管理員,最主要的工做是優化系統配置,使應用在系統上以最優的狀態運行,可是因爲硬件問題、軟件問題、網絡環境等的複雜性和多變性,致使對系統的優化變 得異常複雜,如何定位性能問題出在哪一個方面,是性能優化的一大難題, 從系統入手,闡述因爲系統軟、硬件配置不當可能形成的性能問題,而且探討檢測系統故障和優化性能的通常方法和流程。node


1 cpulinux

性能評估
 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列的值。ios


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)web

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
Linux 2.6.9-42.ELsmp (webserver)        11/29/2008      _i686_  (8 CPU)安全

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%時,表示系統內存資源很是充足,不影響系統性能,應用程序可用內存/系統物理內存<20%時,表示系統內存資源緊缺,須要增長系統內存,20%<應用程序可用內存/系統物理內存<70%時,表示系統內存資源基本能知足應用需求,暫時不影響系統性能。
  free命令還能夠適時的監控內存的使用情況,使用「-s」參數能夠在指定的時間段內不間斷的監控內存的使用狀況:
[root@webserver ~]# free -b -s 5
             total       used       free     shared    buffers     cached
Mem:    8505901056 7528706048  977195008          0  260112384 6601158656
-/+ buffers/cache:  667435008 7838466048
Swap:   8587149312     163840 8586985472

             total       used       free     shared    buffers     cached
Mem:    8505901056 7526936576  978964480          0  260128768 6601142272
-/+ buffers/cache:  665665536 7840235520
Swap:   8587149312     163840 8586985472

             total       used       free     shared    buffers     cached
Mem:    8505901056 7523987456  981913600          0  260141056 6601129984
-/+ buffers/cache:  662716416 7843184640
Swap:   8587149312     163840 8586985472
  其中,「-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

             total       used       free     shared    buffers     cached
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
Linux 2.6.9-42.ELsmp (webserver)        11/30/2008      _i686_  (8 CPU)

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

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
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
Linux 2.6.9-42.ELsmp (webserver)        12/01/2008      _i686_  (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           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

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           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

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.04    0.00    1.83    8.01    0.00   86.18

Device: rrqm/s  wrqm/s  r/s  w/s   rsec/s   wsec/s avgrq-sz avgqu-sz     await  svctm  %util
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
disk- ------------reads------------ ------------writes----------- -----IO------
     total  merged  sectors  ms    total     merged    sectors     ms     cur   sec
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
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解析信息。

相關文章
相關標籤/搜索