一、影響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,則表示系統記憶體不足。需要增加系統記憶體。