Linux服務器性能分析與優化

影響服務器性能的因素:linux

 

    CPU :大部分cpu在同一時間只能運行一個線程,超線程的處理器能夠在同一時間處理多個線程,所以能夠利用超線程特性提升系統性能。ios

          在linux系統下,只有運行SMP內核才能支持超線程,可是安裝的CPU數量越多,從超線程得到的性能提高越少。 nginx

          linux內核會將多核的處理器當個多個單獨的CPU來識別。例如,24核的cpu會被當作8個單個的cpu,從性能角度來說,兩個4核的cpu總體要比8個單核cpu25%-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的個數,本輸出中系統有8CPU,若是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年0921日         _i686_        (1 CPU)

22時1521秒     CPU     %user     %nice   %system   %iowait    %steal     %idle

22時1524秒     all      1.03      0.00      0.34      0.00      0.00     98.63

22時1527秒     all      0.33      0.00      0.33      0.00      0.00     99.33

22時1530秒     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年0921日         _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年0921日         _i686_        (1 CPU)

22時4731秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util

22時4733秒    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 是一個能夠取代vmstatiostatnetstatifstat這些命令的多功能產品

安裝方法

  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

相關文章
相關標籤/搜索