linux服務器性能分析與優化

#1 查看硬件產品名稱
dmidecode |grep 'Product Name'

#2 查看主板序列號
dmidecode |grep -i 'serial number' |grep CN

#3 查看CPU型號
grep name /proc/cpuinfo

#4 查看CPU個(核)數:
grep 'physical id' /proc/cpuinfo

#5 查看cpu使用情況
top

#6 查看內存信息
grep MemTotal /proc/meminfo
free -m
vmstat

#7 查看分區大小情況
fdisk -l

#8 查看分區使用情況
df -h
 
#9 查看內核版本
cat /etc/redhat-release
cat /etc/issue
uname -rm

#10 查看系統啓動信息
dmesg |grep sda

#11 查看各個設備中斷請求(IRQ)
cat /proc/interrupts

#12 查看磁盤陣列級別

####################### 怎麼找到性能瓶頸
操作系統完成一個任務是與系統自身設置、網絡拓撲結構、路由設備、路由策略、
接入設備、物理線路等多個方面密切相關,當linux出現問題時,我們應當從
應用程序、操作系統、服務器硬件、網絡環境綜合排查,定位問題,然後解決。

<1> 操作系統當前運行狀態: 系統負載、內存狀態、進程狀態、cpu負荷、
<2> 系統硬件信息: 磁盤IO、CUP型號、內存大小、網卡帶寬
<3> 應用程序對系統資源的使用情況(DB/BUG/內存溢出)
<4> 接口程序的執行效率、慢查詢語句、SQL優化、代碼執行效率低.
例如問題:
CPU資源過度使用會造成系統中出現大量等待進程,導致應用程序響應緩慢.
進程大量增加會導致系統內存資源增加
物理內存耗盡,系統會使用虛擬內存,虛擬內存的使用會造成磁盤IO的增加並加大
CPU的開銷。

解決問題遵循的流程:
   查看系統系統硬件、網絡設備、操作系統配置、應用程序架構和程序代碼

CPU瓶頸:應用郵件服務器、動態WEB服務器(CPU配置和性能)
         方案:運行SMP內核支持超線程,CPU數量越多,超線程性能提高越少,
              兩個4核的CPU性能比8個單核的CPU性能低25%-30%

內存瓶頸: 打印服務器、數據庫服務器、靜態web服務器.(加大內存大小)
          方案:64位,開啓linux大內存內核支持

磁盤IO瓶頸:raid0(不安全、至少2盤) raid1(安全 磁盤鏡像 利用率50%)
            raid5(奇偶效應) raid10(至少4塊盤)
           方案: 根據業務選擇合適的raid級別
                raid0: 對讀寫操作頻繁並對數據安全性要求不高的應用
                raid1: 對讀寫沒特殊要求,對數據安全要求較高的應用
                raid5: 對讀要求高,對寫要求不高,並保證數據安全的應用
                raid10: 對讀寫要求都很高,對數據安全性要求也高的應用

系統性能標準表:
             好               壞                         糟糕
CPU       user%+sys%<70%     user%+sys%=85%          user%+sys%>=90%      

內存      Swap In (si) =0    Per CPU with 0 page/s   More Swap In & Swap Out
          Swap Out (so)=0    

磁盤      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
[root@home-mysql1 ~]# vmstat 3 5
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 895504  12540  49092    0    0     3     3 1003   21  0  0 100  0  0
 0  0      0 895504  12548  49084    0    0     0    19  978   21  0  1 99  0  0
 0  0      0 895504  12548  49092    0    0     0     0  986   21  0  0 100  0  0
 0  0      0 895504  12548  49092    0    0     0     0  969   20  0  0 100  0  0

解釋:
si 表示磁盤調入內存
so 表示內存調入磁盤
一般情況下si和so值都是0,如果長期不是,表示系統內存不足,需要增加系統內存.

bi 表示讀磁盤(kb/s)
bo 表示寫磁盤(kb/s)
bi+bo參考值100,如果超過1000,而且wa值較大 說明磁盤IO有問題.考慮磁盤讀寫性能

in 表示在某一時間間隔內觀測到的每秒設備中斷數
cs 表示上下文切換次數
in和cs 值越大,由內核消耗的CPU時間越多


us列顯示用戶進程消耗的CPU時間百分比,如果長期大於50%,就需要考慮優化程序或算法
sy列顯示內核進程消耗的CPU時間百分比,sy值較高時,說明內核消耗的CPU資源很多。
us+sy參考值是80%,如果大於80%,說明可能存在CPU資源不足

id列顯示了CPU處在空閒狀態的時間百分比
wa列顯示IO等待所佔用的CPU時間百分比。
wa值越高,說明I/O等待越嚴重,根據經驗,wa參考值是20%,超過說明I/O等待嚴重.
引起I/O等待原因可能是磁盤大量隨機讀寫造成的,也可能是磁盤控制器的帶寬瓶頸造成的.


#2 sar

#3 iostat

#4 free -m (以M爲單位的使用情況)
[root@home-mysql1 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1000        127        873          0         12         47
-/+ buffers/cache:         66        934
Swap:         2047          0       2047

經驗公式:
當應用程序可用內存/系統物理內存>70%時 表示系統內存資源嚴重不足,不影響系統性能。
當應用程序可用內存/系統物理內存<20%時 表示系統內存資源緊張,需要增加系統內存。
當20%< 應用程序可用內存/系統物理內存<70%時 表示系統內存資源基本滿足應用需求,暫時不
影響系統性能.
不間斷檢測內存使用情況:free -b -s 5  

#5 uptime
[root@home-mysql1 ~]# uptime (1分鐘 5分鐘 15分鐘)
 20:28:31 up 11:35,  1 user,  load average: 0.00, 0.00, 0.00
3個值大小不能大於系統CPU的個數,說明負載很高,可能影響系統性能,偶爾大於不擔心,
如果出現值小於CPU個數,表示CPU有空閒時間片。

#6 netstat  顯示本機網絡鏈接、運行端口、路由表詳情

netstat -a  顯示本機所有連接和監聽端口
netstat -n  顯示當前建立的有效連接和端口
netstat -r  顯示路由表信息
netstat -t  顯示所有TCP連接
netstat -u  顯示所有UTP連接
netstat -i  顯示自動配置接口狀態

[root@home-mysql1 ~]# 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     3634      0      0      0     1950      0      0      0 BMRU
lo        16436   0      172      0      0      0      172      0      0      0 LRU
Iface         表示接口名稱
MTU           表示最大傳輸單元 單位字節
RX-OK/TX-OK   表示已經準確無誤的接收/發送了多少數據包
RX-ERR/TX-ERR 表示接收/發送數據包時產生了多少錯誤
RX-DRP/TX-DRP 表示接收/發送數據包時丟棄了多少數據包
RX-OVR/TX-OVR 表示由於誤差而遺失了多少數據包
正常情況下  RX-ERR/TX-ERR RX-DRP/TX-DRP RX-OVR/TX-OVR 值應該爲0
如果不是,網絡質量肯定有問題(檢測網卡設備)

#7 top
top - 22:36:51 up 13:43,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  57 total,   2 running,  55 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1024932k total,   132320k used,   892612k free,    14056k buffers
Swap:  2096472k total,        0k used,  2096472k free,    49868k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                       

                                                                      
 3225 root      15   0 12632 1112  876 R  0.3  0.1   0:00.05 top                           

                                                                       
    1 root      18   0 10372  752  632 S  0.0  0.1   0:00.66 init                          
#8 Nginx php-cgi

開啓10個Nginx進程消耗150MB內存(15MB*10=150MB)
開啓64個php-cgi進程消耗120內存(20MB*64=1280MB)
加上系統自身消耗內存,總共消耗不到2G內存.

如果服務器內存較小,可以只開25個php-cgi進程  這樣消耗php-cgi消耗總內存數才500MB
用Webbench做壓力測試
同等硬件環境下,Nginx的處理能力相當於Apache的5到10倍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章