天天看點

[轉]Linux伺服器性能評估與優化(一)

一、影響linux伺服器性能的因素 

1. 作業系統級

Ø       cpu

Ø       記憶體

Ø       磁盤i/o帶寬

Ø       網絡i/o帶寬

2.        程式應用級

二、系統性能評估标準

影響性能因素

評判标準

糟糕

cpu

user% + sys%< 70%

user% + sys%= 85%

user% + sys% >=90%

記憶體

swap in(si)=0

swap out(so)=0

per cpu with 10 page/s

more swap in & swap out

磁盤

iowait % < 20%

iowait % =35%

iowait % >= 50%

其中:

       %user:表示cpu處在使用者模式下的時間百分比。

       %sys:表示cpu處在系統模式下的時間百分比。

       %iowait:表示cpu等待輸入輸出完成時間的百分比。

       swap in:即si,表示虛拟記憶體的頁導入,即從swap disk交換到ram

       swap out:即so,表示虛拟記憶體的頁導出,即從ram交換到swap disk。

三、系統性能分析工具

1.常用系統指令 

vmstat、sar、iostat、netstat、free、ps、top等

2.常用組合方式 

•           用vmstat、sar、iostat檢測是否是cpu瓶頸

•           用free、vmstat檢測是否是記憶體瓶頸

•           用iostat檢測是否是磁盤i/o瓶頸

•           用netstat檢測是否是網絡帶寬瓶頸

四、linux性能評估與優化

1. 系統整體性能評估(uptime指令)

[root@web1 ~]# uptime

16:38:00 up 118 days, 3:01, 5 users, load average: 1.22, 1.02, 0.91

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

2. cpu性能評估

(1)利用vmstat指令監控系統cpu

   該指令可以顯示關于系統各種資源之間相關性能的簡要資訊,這裡我們主要用它來看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

l        procs

     r清單示運作和等待cpu時間片的程序數,這個值如果長期大于系統cpu的個數,說明cpu不足,需要增加cpu。

     b清單示在等待資源的程序數,比如正在等待i/o、或者記憶體交換等。

l        cpu

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

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

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

(2)利用sar指令監控系統cpu

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      90.08     0.00      0.13      0.16      0.00     9.63

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

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

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

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

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

l        %iowait列顯示了io等待所占用的cpu時間百分比

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

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

問題

1.你是否遇到過系統cpu整體使用率不高,而應用緩慢的現象?

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

3. 記憶體性能評估

(1)利用free指令監控記憶體

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

[root@webserver ~]# free -m

                total         used       free     shared    buffers     cached

mem:       8111       7185        926          0        243           6299

-/+ buffers/cache:     643       7468

swap:       8189          0         8189

     一般有這樣一個經驗公式:應用程式可用記憶體/系統實體記憶體>70%時,表示系統記憶體資源非常充足,不影響系統性能,應用程式可用記憶體/系統實體記憶體<20%時,表示系統記憶體資源緊缺,需要增加系統記憶體,20%<應用程式可用記憶體/系統實體記憶體<70%時,表示系統記憶體資源基本能滿足應用需求,暫時不影響系統性能。

3.記憶體性能評估

                total         used       free     shared    buffers     cached

swap:       8189          0         8189

(2)利用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

l        memory

         swpd清單示切換到記憶體交換區的記憶體數量(以k為機關)。如果swpd的值不為0,或者比較大,隻要si、so的值長期為0,這種情況下一般不用擔心,不會影響系統性能。

         free清單示目前空閑的實體記憶體數量(以k為機關)

         buff清單示buffers cache的記憶體數量,一般對塊裝置的讀寫才需要緩沖。

         cache清單示page cached的記憶體數量,一般作為檔案系統cached,頻繁通路的檔案都會被cached,如果cache值較大,說明cached的檔案數較多,如果此時io中bi比較小,說明檔案系統效率比較好。

l        swap

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

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

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

繼續閱讀