1. 程式人生 > >Linux 和 Android 系統性能分析

Linux 和 Android 系統性能分析

作為一名Linux 或 Android 平臺的系統工程師,在開發系統新功能外,主要工作就是優化系統性能,使系統上以最優的狀態執行,但是由於硬體問題、軟體問題、網路環境等的複雜性和多變性,導致對系統的優化變得異常複雜,如何定位效能問題出在哪個方面,是效能優化的一大難題, 從系統入手,闡述由於系統軟、硬體配置不當可能造成的效能問題,並且探討檢測系統故障和優化效能的一般方法和流程。

一、CPU效能評估

Cpu是影響Linux效能的主要因素之一,下面先介紹幾個檢視CPU效能的命令。
1.1 vmstat命令
該命令可以顯示關於系統各種資源之間相關效能的簡要資訊,這裡我們主要用它來看CPU的一個負載情況。
下面是vmstat命令在我在安卓編譯伺服器的輸出結果:

[[email protected] ~]# vmstat
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統計輸出:

[[email protected] ~]# 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的使用情況:

[[email protected] ~]# 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的平均資訊,看下面的一個輸出:

[[email protected] ~]# 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是監控系統性能最常用的一個命令,主要用來統計系統當前的執行狀況,輸出的資訊依次為:系統現在的時間、系統從上次開機到現在運行了多長時間、系統目前有多少登陸使用者、系統在一分鐘內、五分鐘內、十五分鐘內的平均負載。

看下面的一個輸出:

[[email protected] ~]# 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資源。


二、記憶體效能評估

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

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

[[email protected] ~]# 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”引數可以在指定的時間段內不間斷的監控記憶體的使用情況:

[[email protected] ~]# 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秒鐘執行一次,並把執行的結果更新在螢幕上。例如:

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

[[email protected] ~]# 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本章小結

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


三、磁碟I/O效能評估

在對磁碟I/O效能做評估之前,必須知道的幾個方面是:
  熟悉RAID儲存方式,可以根據應用的不同,選擇不同的RAID方式,例如,如果一個應用經常有大量的讀操作,可以選擇RAID5方式構建磁碟陣列儲存資料,如果應用有大量的、頻繁的寫操作,可以選擇raid0存取方式,如果應用對資料安全要求很高,同時對讀寫也有要求的話,可以考慮raid01存取方式等等。
  儘可能用記憶體的讀寫代替直接磁碟I/O,使頻繁訪問的檔案或資料放入記憶體中進行操作處理,因為記憶體讀寫操作比直接磁碟讀寫的效率要高千倍。
  將經常進行讀寫的檔案與長期不變的檔案獨立出來,分別放置到不同的磁碟裝置上。
  對於寫操作頻繁的資料,可以考慮使用裸裝置代替檔案系統。這裡簡要講述下檔案系統與裸裝置的對比:

使用裸裝置的優點有:
  資料可以直接讀寫,不需要經過作業系統級的快取,節省了記憶體資源,避免了記憶體資源爭用。
  避免了檔案系統級的維護開銷,比如檔案系統需要維護超級塊、I-node等。
  避免了作業系統的cache預讀功能,減少了I/O請求。
使用裸裝置的缺點是:
  資料管理、空間管理不靈活,需要很專業的人來操作。
其實裸裝置的優點就是檔案系統的缺點,反之也是如此,這就需要我們做出合理的規劃和衡量,根據應用的需求,做出對應的策略。
下面接著介紹對磁碟IO的評估標準。

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

[[email protected] ~]# 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”命令組合也可以檢視系統磁碟的使用狀況,請看如下輸出:

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

[[email protected] ~]#   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”組合也可以檢視磁碟的統計資料,情況下面的一個輸出:

[[email protected] ~]# 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.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           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命令的輸出完全相同,請看下面的一個例項:

[[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     3 4.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解析資訊。

相關推薦

Linux Android 系統性分析

作為一名Linux 或 Android 平臺的系統工程師,在開發系統新功能外,主要工作就是優化系統性能,使系統上以最優的狀態執行,但是由於硬體問題、軟體問題、網路環境等的複雜性和多變性,導致對系統的優化變得異常複雜,如何定位效能問題出在哪個方面,是效能優化的一大難題, 從系

android系統性分析

作為一名Linux 或 Android 平臺的系統工程師,在開發系統新功能外,主要工作就是優化系統性能,使系統上以最優的狀態執行,但是由於硬體問題、軟體問題、網路環境等的複雜性和多變性,導致對系統的優化變得異常複雜,如何定位效能問題出在哪個方面,是效能優化的一大難題, 從系統入手,闡述由於系統軟、硬體配置不當

Android中RelativeLayoutLinearLayout性分析

ant 顯示 二次 iou other comm 排列 vertica 簡單的 先看一些現象吧:用eclipse或者Android studio,新建一個Activity自動生成的布局文件都是RelativeLayout,或許你會認為這是IDE的默認設置問題,其實不然,

Linux系統性分析命令vmstat,iostat,sar使用詳解

當系統業務出現異常,需要對系統性能進行分析時,從何下手是個問題。因為效能分析是個很系統的問題,它可能是系統軟體層面的問題,也可能是底層硬體有異常,所以這些用於分析的命令側重點也有所不同,例如:vmstat/top則偏重於觀察系統程序的CPU和記憶體使用情況,而iostat則是檢查OS與儲存之間的IO

Linux系統性分析命令

效能分析工具 一、CPU效能 # vmstat 2 3    //間隔2秒,輸出3次 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------  r  b   swpd   free   buff  ca

android系統性優化(63)---Android APP 卡頓問題分析及解決方案

使用者對卡頓的感知, 主要來源於介面的重新整理. 而介面的效能主要是依賴於裝置的UI渲染效能. 如果我們的UI設計過於複雜, 或是實現不夠友好,計算繪製演算法不夠優化, 裝置又不給力, 介面就會像卡住了一樣, 給使用者卡頓的感覺.如果你的應用介面出現卡頓不流暢的情況,不用懷疑,這很大原因是你沒有在16ms完成

linux系統性分析命令ps.pstree及top詳解

第四行顯示實體記憶體的使用情況,包括總的可以使用的記憶體、已用記憶體、空閒記憶體、緩衝區佔用的記憶體 Mem: 16280612k total   實體記憶體總量 879588k used   使用的實體記憶體總量 15401024k free   空閒記憶體總量 110296k buffers    用作核

嵌入式:Linux jffs2,yaffs2,logfs,ubifs檔案系統性分析

    在嵌入式領域,FLASH是一種常用的儲存介質,由於其特殊的硬體結構,所以普通的檔案系統如ext2,ext3等都不適合在其上使用,於是就出現了專門針對FLASH的檔案系統,比較常用的有jffs2,yaffs2,logfs,ubifs。那麼對於這幾個檔案系統,如何選擇一

Android 系統性優化(30)---Android效能全面分析與優化方案研究

5.1、渲染問題先來看看造成應用UI卡頓的常見原因都有哪些?1、人為在UI執行緒中做輕微耗時操作,導致UI執行緒卡頓;2、佈局Layout過於複雜,無法在16ms內完成渲染;3、同一時間動畫執行的次數過多,導致CPU或GPU負載過重;4、View過度繪製,導致某些畫素在同一幀時間內被繪製多次,從而使CPU或G

linux 系統性分析常用命令

 1.top 使用許可權:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 說明:即時顯示process的動態 d :改變顯示的更新速度,或是在交談式指令列( interactive command)

正確使用Android分析工具——TraceView

dalvik虛擬機 rac 說明文 重復 能力 個人 method ring 這不 TraceView界面 現來看一下整個界面的圖,整個界面包括上下兩部分,上面是你測試的進程中每個線程的執行情況,每個線程占一行;下面是每個方法執行的各個指標的值 上面一部分是你測試進程的中每

Linux使用sar進行性分析

hang 大於 .com rtp 百分比 workload 定向 等待時間 模式 轉:https://blog.csdn.net/xusensen/article/details/54606401#sar%E7%AE%80%E4%BB%8B Linux使用sar進行性能分析

避免雲中斷提高系統性的4種方法

互聯網 擴展 軟件 提高 價格 route 變化 四種方法 數據   避免雲中斷和提高系統性能的4種方法   當大多數人聽到關於雲計算中斷的頭條新聞時,他們通常考慮的是哪個雲計算供應商,或其負面宣傳將如何影響股票價格,卻很少有人會想到事件背後的相關人員,也就是負責修復問題並

Linux下的系統性調優工具——Perf

參考以下連結文章整理:Perf -- Linux下的系統性能調優工具,第 1 部分Perf -- Linux下的系統性能調優工具,第 2 部分 感謝原作者,讓我知道了效能調優也是如此有趣,Linux下還有如此強大之Linux系統調優工具。 Perf——Linux下的系統性能調優工具 1. 背

linux系統看系統性進行效能監控的幾大命令列

一般我們檢視系統性能主要是在以下幾個方面 1.使用者使用CPU情況 展現為 %user 2.系統使用CPU情況 展現為 %sys 3.wio或iowait     展現為 %iowait 程序由於等待磁碟IO而使CPU處於空閒狀態的比率 4.CPU的空閒率 5.CPU上下文的

Android系統性調優工具介紹

經作者授權,發表Tieto某青年牛的一篇《程式設計師》大作。Android系統性能調優工具介紹在軟體開發過程中,想必很多讀者都遇到過系統性能問題。而解決系統性能問題的幾個主要步驟是:測評:對系統進行大量

使用Flame Graph進行系統性分析

ima cut htm -- () 還需要 通過 The i++ 關鍵詞:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg開發的一款開源可視化性能分析工具,形象的成為火焰圖。 從底向上像火苗一樣逐漸變小,也反映了相互之間的包

五大車載操作(VOS)系統優劣對比,車載系統架構分析-QNX系統性分析

車載作業系統(AutomoTIve OperaTIng System,簡稱AOS)是管理和控制車載硬體與車載軟體資源的程式系統,是直接執行在AB上的最基本的系統軟體,任何上層軟體,HMI,資料連線都必須在作業系統的支援下才能執行。   車載作業系統是使用者和車載硬體的介面,同時也是車載硬體和上層軟體的

Android 系統性優化(11)---UC效能優化方案

       一、效能優化六項指標:              效能、記憶體、穩定性、流量、電量、安裝包大小;       二、背景 ---- Android程式卡頓產生原因:              1、Android系統低效              --渲染執行緒、同步介面、廣播機制         

Android 系統性優化(36)---顯示效能指標

    從 Android 誕生的那一刻起,流暢度就為眾人所關注。一時之間,似乎所有人都在討論 Android 和 iOS 誰的流暢度更好。但是,毫不誇張的說,流暢度絕對是 Android 眾多效能維度中最為奇葩的一個。因為,為了刻畫這一效能維度,業界設計了各式各樣的指標來對