#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倍。
linux服務器性能分析與優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.