影響服務器性能的因素:linux
CPU :大部分cpu在同一時間只能運行一個線程,超線程的處理器能夠在同一時間處理多個線程,所以能夠利用超線程特性提升系統性能。ios
在linux系統下,只有運行SMP內核才能支持超線程,可是安裝的CPU數量越多,從超線程得到的性能提高越少。 nginx
linux內核會將多核的處理器當個多個單獨的CPU來識別。例如,2個4核的cpu會被當作8個單個的cpu,從性能角度來說,兩個4核的cpu總體要比8個單核cpu低25%-30%。web
可能出現瓶頸的應用有:郵件服務器,動態web服務器等。算法
內存 :內存過小,系統進程會被阻塞,應用也會變得緩慢,甚至失去響應,內存太大致使浪費。shell
虛擬內存能夠緩解物理內存的不足,可是虛擬內存的過多佔用會致使應用程序的性能明顯降低。數據庫
在一個32位處理器的linux系統中超過8GB的物理內存都將被浪費,所以要使用更大的內存,建議安裝64位的操做系統,同時開啓linux的大內存內核支持。centos
因爲處理器尋址範圍的限制,在32位linux操做系統上,應用程序單個進程最大隻能使用2GB的內存。緩存
可能出現的內存瓶頸有:數據庫服務器、靜態web網站服務器
磁盤I/O性能
網絡帶寬
性能分析工具
一、系統總體性能評估(uptime命令)
[root@web1 ~]# uptime
16:38:00 up 118 days,3:01, 5 users, load average: 1.22, 1.02, 0.91
當前時間 04:03:58 系統已運行時間 當前在線用戶 平均負載 最近1 分鐘 5分鐘 15分鐘
注意:load average 輸出的這三個值不等大於系統cpu的個數,本輸出中系統有8個CPU,若是load average的三個值長期大於8時,說明CPU很繁忙,負載很高,可能會影響系統性能。小於時則相反,有空餘的時間片。
二、CPU性能評估
2.一、利用vmstat命令監控系統cpu
[root@pc2 local]# 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 1504 62092 161848 409792 0 0 7 6 38 75 0 0 100 0 0
1 0 1504 62084 161848 409792 0 0 0 0 138 517 3 1 97 0 0
0 0 1504 62084 161856 409792 0 0 0 6 90 255 2 1 97 0 0
r :表示運行隊列(多少個進程分配到cpu),當這個值超過了cpu數目,就會出現cpu瓶頸
b :堵塞的進程(等待資源的進程數,好比等待I/O,內存交換)
swpd :虛擬內存已使用的大小,若大於零,若大於0則表示你內存不足。
free :空閒的物理內存大小,這個值除以1024得出來的值爲m
buff :linux系統中權限、目錄裏有什麼內容、存儲等的緩存。
cache :直接用來記憶咱們打開的文件,給文件作緩衝。
si :每秒從磁盤讀入虛擬內存的大小,若是這個值大於0,表示物理內存不夠用或者內存泄露了
so :每秒虛擬內存寫入磁盤的大小,若大於0,同上。
bi :塊設備每秒接收的塊數量
bo :塊設備每秒發送的塊數量
in :每秒cpu的中斷次數
cs :是CPU每秒發生的上下文切換次數
us :是用戶進程消耗CPU時間的百分比。若是長期大於50%,就須要考慮優化程序或算法
sy :顯示了內核進程消耗的CPU時間百分比。Sy的值較高時,說明內核消耗的CPU資源不少。
id :空閒cpu時間
wt :等待IO CPU時間。
注意:us+sy的參考值爲80%,若是us+sy大於 80%說明可能存在CPU資源不足。
通常狀況下,si、so的值都爲0,若是si、so的值長期不爲0,則表示系統內存不足。須要增長系統內存。
swpd列表示切換到內存交換區的內存數量(以k爲單位)。若是swpd的值不爲0,或者比較大,只要si、so的值長期爲0,這種狀況下通常不用擔憂,不會影響系統性能
2.二、利用sar命令監控系統cpu
sar 選項 [-o file] 採樣間隔 採樣次數
-A : 全部報告的總和
-o file 命令結果將以二進制文件格式存放至文件中
-u :輸出cpu使用狀況的統計信息
-a :文件讀寫狀況
-c :輸出進程統計信息
-R :輸出內存頁面統計信息
-y :終端設備活動狀況
-r :輸出內存和交換空間的統計信息
[root@pc2 local]# sar -u 3 3 #
Linux 2.6.32-642.3.1.el6.i686 (pc2) 2016年09月21日 _i686_ (1 CPU)
22時15分21秒 CPU %user %nice %system %iowait %steal %idle
22時15分24秒 all 1.03 0.00 0.34 0.00 0.00 98.63
22時15分27秒 all 0.33 0.00 0.33 0.00 0.00 99.33
22時15分30秒 all 0.34 0.00 0.00 0.00 0.00 99.66
平均時間: all 0.56 0.00 0.22 0.00 0.00 99.21
%user:顯示在用戶級別(application)運行使用 CPU 總時間的百分比。
%nice:顯示在用戶級別,用於nice操做,所佔用 CPU 總時間的百分比。
%system:在覈心級別(kernel)運行所使用 CPU 總時間的百分比。
%iowait:顯示用於等待I/O操做佔用 CPU 總時間的百分比。
%steal:管理程序(hypervisor)爲另外一個虛擬進程提供服務而等待虛擬 CPU 的百分比。
%idle:顯示 CPU 空閒時間佔用 CPU 總時間的百分比。
注意:若 %iowait 的值太高,表示硬盤存在I/O瓶頸,若 %idle 的值高但系統響應慢時,有多是 CPU 等待分配內存,此時應加大內存容量,若 %idle 的值持續低於1,則系統的 CPU 處理能力相對較低,代表系統中最須要解決的資源是 CPU
三、內存性能評估
3.一、利用free指令監控內存
[root@pc2 local]# free -m #以m爲單位
total used free shared buffers cached
Mem: 1006 947 58 5 158 400
-/+ buffers/cache : 387 618
Swap: 2015 1 2014
total :內存總數
used :已經使用的內存數
free :空閒的內存數
shared:多個進程共享的內存總額
shared 、buffers 、cached:磁盤緩存的大小
-/+ buffers/cache: (已用的內存數),公式:used-buffers-cached(得出的結果除以1021,結果的單位就爲m)
-/+ buffers/cache: (可用的內存數),公式:free+buffers+cached
注意:咱們在觀察 linux系統的內存使用狀況時! 只要沒發現用 linux系統的交換空間! 就不用擔憂本身的內存過小" 若是經常看到swap空間用
了不少! 你可能就要考慮增長物理內存了" 這也是在linux服務器上看內存是否夠用的標準"
四、磁盤I/O性能評估(df)
4.一、利用iostat評估磁盤性能
[root@pc2 local]# iostat -d
Linux 2.6.32-642.3.1.el6.i686 (pc2) 2016年09月21日 _i686_ (1 CPU)
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.57 13.93 11.28 3727540 3016812
tps:該設備每秒的傳輸次數
Blk_read/s表示每秒讀取的數據塊數。
Blk_wrtn/s表示每秒寫入的數據塊數。
Blk_read表示讀取的全部塊數。
Blk_wrtn表示寫入的全部塊數。
注意! 若是Blk_wrtn/s值很大,表示磁盤的寫操做很頻繁,能夠考慮優化磁盤或者優化程序,若是Blk_read/s值很大,表示磁盤直接讀取操做不少,能夠將讀取的數據放入內存中進行操做。
4.二、利用sar -d 評估磁盤性能
[root@pc2 local]# sar -d 2 3
Linux 2.6.32-642.3.1.el6.i686 (pc2) 2016年09月21日 _i686_ (1 CPU)
22時47分31秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
22時47分33秒 dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
await表示平均每次設備I/O操做的等待時間(以毫秒爲單位)。
svctm表示平均每次設備I/O操做的服務時間(以毫秒爲單位)。
%util表示一秒中有百分之幾的時間用於I/O操做。
五、網絡性能評估
(1)經過ping命令檢測網絡的連通性
(2)經過netstat –i組合檢測網絡接口情況
(3)經過netstat –r組合檢測系統的路由表信息
(4)經過sar –n組合顯示系統的網絡運行狀態 sar -n DEV 5 3
六、shell分析nginx日誌
分析日誌中的UserAgent
cat access_20130704.log | awk -F "\"" '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -20
分析日誌中那些IP訪問最多
cat access_20130704.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20
分析日誌中那些Url請求訪問次數最多
cat access_20130704.log | awk -F "\"" '{print $(NF-5)}' | sort | uniq -c | sort -nr | head -20
七、圖形化檢測工具
dstat 是一個能夠取代vmstat,iostat,netstat和ifstat這些命令的多功能產品
安裝方法
1. 在centos下 能夠 yum -y instatll dstat
2. 下載rpm包進行安裝
wget http://packages.sw.be/dstat/dstat-0.7.2-1.el5.rfx.noarch.rpm
rpm -ivh dstat-0.7.2-1.el5.rfx.noarch.rpm