性能調(diào)優(yōu)概述,這是一篇最通俗易懂的性能調(diào)優(yōu)總結(jié)
精彩早知道
- 作者概述
- 什么是性能調(diào)優(yōu)?(what)
- 為什么需要性能調(diào)優(yōu)?(why)
- 什么時(shí)候需要性能調(diào)優(yōu)?(when)
- 什么地方需要性能調(diào)優(yōu)?(where)
- 什么人來(lái)進(jìn)行性能調(diào)優(yōu)?(who)
- 怎么樣進(jìn)行性能調(diào)優(yōu)?(How)
- 總結(jié)
硬件配置:CUP Xeon E5620 x 2 8核心, 內(nèi)存 16G , 硬盤 RAID 10,操作系統(tǒng): CentOS 6.4 x86_64(64位)。
概述
在這篇博文中,我不想用一些抽象的概念去說(shuō)性能調(diào)優(yōu)的問(wèn)題,只想用最通俗的語(yǔ)言盡量來(lái)準(zhǔn)確的表達(dá)我的想法。
由于本人水平有限,有什么不對(duì)或者不清楚的地方歡迎大家交流指正。為了更能通俗易懂的理解我們即將要的性能調(diào)優(yōu)的話題,我在這里簡(jiǎn)單的和大家說(shuō)一下我寫這篇文章的寫作方法 5w+1h方法。
注,5w+1h就是對(duì)所做工作進(jìn)行科學(xué)的分析,對(duì)某一工作在調(diào)查研究的基礎(chǔ)上:
- 就其工作內(nèi)容(What)
- 責(zé)任者(Who)
- 工作崗位(Where)
- 工作時(shí)間(When
- 怎樣操作(How
- 以及為何這樣做(Why)
即”5W”、”1H”進(jìn)行書面描述,并按此描述進(jìn)行操作,達(dá)到完成職務(wù)任務(wù)的目標(biāo)。(來(lái)源“百度百科”)
哈哈!聽(tīng)過(guò)馬哥課程的一定不陌生!
二、什么是性能調(diào)優(yōu)?(what)
在說(shuō)什么是性能調(diào)優(yōu)之前,我們先來(lái)說(shuō)一下,計(jì)算機(jī)的體系結(jié)構(gòu)。
如上圖,簡(jiǎn)單來(lái)說(shuō)包括三塊:硬件、操作系統(tǒng)、應(yīng)用程序。其實(shí),性能調(diào)優(yōu)就是調(diào)節(jié)這些內(nèi)容,包括硬件、操作系統(tǒng)、應(yīng)用程序。其中,這三大方面中又包含了若干的內(nèi)容。
硬件包括:CPU、內(nèi)存、磁盤、網(wǎng)卡、其它……,
操作系統(tǒng)包括 進(jìn)程、虛擬內(nèi)存、文件系統(tǒng)、網(wǎng)絡(luò)、其它……,
應(yīng)用程序我就不用說(shuō)了大家都懂,常見(jiàn)的有Apache、MySQL、Nginx、Memcahed等。
那什么是性能調(diào)優(yōu)呢?
性能調(diào)優(yōu)就是對(duì)計(jì)算機(jī)硬件、操作系統(tǒng)和應(yīng)用有相當(dāng)深入的了解,調(diào)節(jié)三者之間的關(guān)系,實(shí)現(xiàn)整個(gè)系統(tǒng)(包括硬件、操作系統(tǒng)、應(yīng)用)的性能***化,并能不斷的滿足現(xiàn)有的業(yè)務(wù)需求。這就是我們說(shuō)的性能調(diào)優(yōu),客官你懂了嘛?
三、為什么需要性能調(diào)優(yōu)?(why)
下面我們來(lái)說(shuō)一說(shuō)為什么需要性能調(diào)優(yōu),其實(shí)說(shuō)到底就兩原因:一是為了獲得更好的系統(tǒng)性能(就是你現(xiàn)有的系統(tǒng)運(yùn)行的還不錯(cuò),但優(yōu)化一下可以運(yùn)行的更好)。二是通過(guò)性能調(diào)優(yōu)來(lái)滿足不斷增加的業(yè)務(wù)需求。為了更直觀的幫助大家來(lái)理解為什么要性能調(diào)優(yōu)?我們分別從三個(gè)方面來(lái)說(shuō):
- 硬件選型(根據(jù)服務(wù)器應(yīng)用類型來(lái)選購(gòu)服務(wù)器)
- 操作系統(tǒng)發(fā)行版本 (選擇發(fā)行版本)
- 應(yīng)用程序 (Nginx、MySQL等)
1.硬件選型
不管你是租服務(wù)器也好還是自己買服務(wù)器也好都要遇到一個(gè)問(wèn)題,我們選擇什么樣硬件配置的服務(wù)器。
一般我們是根據(jù)應(yīng)用類型來(lái)選擇服務(wù)器,因?yàn)槟悴豢赡芤环N硬件配置來(lái)滿足所有的應(yīng)用需求,因?yàn)槊總€(gè)應(yīng)用的具體需求不一樣。下面我們來(lái)看一下在項(xiàng)目實(shí)施中有哪些應(yīng)用類型:
- 負(fù)載均衡:性能要求相對(duì)較低,因?yàn)橹回?fù)責(zé)轉(zhuǎn)發(fā)數(shù)據(jù),但要保證選一性能突出的網(wǎng)卡即可。(推薦配置:CPU E5620 x 1 內(nèi)存 8G 硬盤 500G(RAID5))
- Web 服務(wù)器:一般只處理一些靜態(tài)頁(yè)面或者圖片等,因此要求也不是很高,主流的服務(wù)器都可以。(推薦配置:CPU E5620 x 1 內(nèi)存 16G 硬盤 500G(RAID5))
- 應(yīng)用服務(wù)器:一般應(yīng)用程序服器,他承擔(dān)網(wǎng)站功能的實(shí)現(xiàn),在架構(gòu)中占有比較重的位置,特別是網(wǎng)站架構(gòu)中只有一臺(tái)應(yīng)用服務(wù)器,對(duì)CPU、內(nèi)存、磁盤要求都比較高。(推薦配置:CPU E5620 x 2 內(nèi)存 32G 硬盤 500G(RAID10))
- 緩存服務(wù)器:分為前端頁(yè)面緩存與后面數(shù)據(jù)緩存,他們典型的應(yīng)用分別是Varnish與Memcached,對(duì)內(nèi)存的要求比較大,一般我們配置服務(wù)器時(shí)使用較大有內(nèi)存。(推薦配置:CPU E5620 x 1 內(nèi)存 32G 硬盤 500G(RAID10))
- 數(shù)據(jù)庫(kù)服務(wù)器:數(shù)據(jù)服務(wù)器對(duì)CPU、內(nèi)存、磁盤的要求都很高,一但某個(gè)硬件是短板都會(huì)帶來(lái)性能問(wèn)題。(推薦配置:CPU E5620 x 2 內(nèi)存 64G 固態(tài)硬盤 500G(RAID10))
- 備份服務(wù)器:備份服務(wù)器一般就沒(méi)有什么要求,但有點(diǎn)可以肯定是必須有足夠大的硬盤空間。(推薦配置:CPU E5620 x 1 內(nèi)存 4G 硬盤 2TB(RAID5))
- 監(jiān)控服務(wù)器:一般也沒(méi)什么需要,普通的PC服務(wù)器就可以。(推薦配置:CPU E5620 x 1 內(nèi)存 4G 硬盤 500(RAID5))
- 其它服務(wù)器:至于其它服務(wù)器就看各位的具體需要具體分析了。
這下各位知道什么是硬件的性能調(diào)優(yōu)了吧,根據(jù)你具體的應(yīng)用,進(jìn)行具體分析特別是像MySQL這樣的服務(wù)器,對(duì)CPU、內(nèi)存、磁盤要求都比較高。
所以,對(duì)硬件的性能調(diào)優(yōu)我們必須做到選擇合適的硬件配置。這是網(wǎng)站架架構(gòu)或者項(xiàng)目實(shí)施首先要解決的問(wèn)題!
2.操作系統(tǒng)
有本書叫《Linux Performance Tuning》(Linux 性能調(diào)優(yōu))這本書是老外寫的,作者是 Fernando Apesteguia 。
為什么我們需要性能調(diào)優(yōu)?他得出的結(jié)論是這樣的:
“當(dāng)一個(gè)發(fā)行版打包發(fā)送到客戶手中的時(shí)候,它是為了完全兼容市場(chǎng)中大部分計(jì)算機(jī)而設(shè)計(jì)的。這是一個(gè)相當(dāng)混雜的硬件集合(硬盤,顯卡,網(wǎng)卡,等等)。
所以Red Hat,SUSE,Mandriva,Ubuntu和其他的一些發(fā)行版廠商選擇了一些保守的設(shè)置來(lái)確保安裝成功。”
簡(jiǎn)單說(shuō),你的操作系統(tǒng)已經(jīng)運(yùn)行的不錯(cuò)了,但是你可以調(diào)節(jié)它獲得更高的性能,比如你有個(gè)高性能的磁盤,但你的操作系統(tǒng)中一些選項(xiàng)參數(shù)默認(rèn)沒(méi)有啟動(dòng),就不能實(shí)現(xiàn)這些高級(jí)功能來(lái)提高硬盤性能。
還有我想說(shuō)就是對(duì)操作系統(tǒng)發(fā)行版選擇的問(wèn)題,RedHat或CentOS這些操作系統(tǒng)在項(xiàng)目實(shí)施或網(wǎng)站架構(gòu)中用的比較多,主要針對(duì)企業(yè)應(yīng)用而開(kāi)發(fā)的操作系統(tǒng)。
而Ubuntu之類的操作系統(tǒng)對(duì)桌面支持的比較好,所以選擇發(fā)行版本時(shí)得注意。(一般企業(yè)中用的比較多的是CentOS)再有就是我們一般不要選擇***的發(fā)行版,因?yàn)閯偝鰜?lái)的發(fā)行版相對(duì)來(lái)說(shuō)bug還比較多,不要先當(dāng)“小白鼠”了,
比如:剛剛出來(lái)CentOS 7 等過(guò)一段時(shí)間穩(wěn)定了再使用,目前我們可以選擇 CentOS 6.4 或 6.5即可。
(但新版本也有很多好處,新版本中加入了很多新功能,去掉習(xí)已知bug,對(duì)于一些不重要的應(yīng)用,可嘗試使用新的操作系統(tǒng))
3.應(yīng)用程序
***,我們得來(lái)說(shuō)說(shuō)應(yīng)用程序了,我們先來(lái)簡(jiǎn)單看到一下Apache的MPM配置文件:
prefork 模型:
- <IfModule prefork.c>
- StartServers 8
- MinSpareServers 5
- MaxSpareServers 20
- ServerLimit 256
- MaxClients 256
- MaxRequestsPerChild 4000
- </IfModule>
大家可以從上面的配置文件中可以看出,apache 開(kāi)始啟動(dòng)時(shí)啟用 8個(gè)進(jìn)程,最小 5個(gè)進(jìn)程,***20個(gè)進(jìn)程,每個(gè)進(jìn)程限制請(qǐng)求數(shù)為256個(gè),最多可以接受請(qǐng)求 4000個(gè),超過(guò)這個(gè)限制數(shù)自動(dòng)銷毀。
worker 模型:
- <IfModule worker.c>
- StartServers 2
- MaxClients 150
- MinSpareThreads 25
- MaxSpareThreads 75
- ThreadsPerChild 25
- MaxRequestsPerChild 0
- </IfModule>
在看一下,worker模型的配置文件,默認(rèn)啟動(dòng)2個(gè)進(jìn)程,每個(gè)進(jìn)程可以接受的請(qǐng)求為150個(gè),每個(gè)進(jìn)程中最小線程數(shù)25個(gè),***線程數(shù)為75個(gè),默認(rèn)線程數(shù)25個(gè),每個(gè)線程可以接受的請(qǐng)求沒(méi)有限制為0。
好了,大家看完上面的配置文件,可以看出默認(rèn)的Apache配置文件,設(shè)置的比較保守,只適于一些中小網(wǎng)站,想要獲得高性能的Apache服務(wù)器還必須進(jìn)行性能調(diào)優(yōu),包括apache編譯選項(xiàng),配置文件優(yōu)化等,具體的調(diào)優(yōu)我們?cè)谶@里先不細(xì)說(shuō)。
通過(guò)我們上面的講解,我們分別從硬件、操作系統(tǒng)、應(yīng)用程序,這三個(gè)方面入手和大家談?wù)劄楹涡枰阅苷{(diào)優(yōu),相信大家已經(jīng)知道并了解,相信大家都迫不及待了吧。
嘿嘿,我們先不急還有很多問(wèn)題沒(méi)有說(shuō)清楚,下面我們和大家來(lái)說(shuō)說(shuō),什么時(shí)候需要性能調(diào)優(yōu)?
四、什么時(shí)候需要性能調(diào)優(yōu)?(when)
一般分為兩個(gè)時(shí)間段:
- 上線前(基本優(yōu)化)
- 上線后(持續(xù)優(yōu)化)
為什么這樣說(shuō)呢,一般我們?cè)陧?xiàng)目實(shí)施到項(xiàng)目上線這段時(shí)間,不但要準(zhǔn)備硬件服務(wù)器、安裝操作系統(tǒng)、環(huán)境搭建,還有個(gè)很重要的問(wèn)題就是進(jìn)行性能優(yōu)化,包括操作系統(tǒng)優(yōu)化和應(yīng)用環(huán)境優(yōu)化等,我稱上線前的優(yōu)化為基本優(yōu)化也稱為經(jīng)驗(yàn)優(yōu)化。
根據(jù)你做過(guò)的項(xiàng)目和你工作中的經(jīng)驗(yàn)對(duì)上線前的服務(wù)器或架構(gòu)進(jìn)行基本的性能優(yōu)化來(lái)滿足業(yè)務(wù)需求。
再有就是項(xiàng)目上線后的優(yōu)化,在上線前我們已經(jīng)經(jīng)過(guò)基本的性能優(yōu)化,解決大部分的性能問(wèn)題,但畢竟上線前的所以測(cè)試都是模擬測(cè)試并進(jìn)行相關(guān)的性能優(yōu)化,與上線后的真實(shí)環(huán)境還是有相當(dāng)大的區(qū).
我們首先要做的就是對(duì)上線后的項(xiàng)目進(jìn)行性能監(jiān)控包括服務(wù)器性能監(jiān)控和服務(wù)性能監(jiān)控。
服務(wù)器性能監(jiān)控包括:
CPU使用率、CPU負(fù)載、內(nèi)存使用率、磁盤I/O、磁盤空間使用率、網(wǎng)絡(luò)流量、系統(tǒng)進(jìn)程等,服務(wù)性能監(jiān)控包括apache、nginx、mysql。
以上架構(gòu)中所有的服務(wù)都需要進(jìn)行性能監(jiān)控,一但發(fā)現(xiàn)有問(wèn)題我們都得去進(jìn)行性能優(yōu)化,在這個(gè)過(guò)程中我稱為持續(xù)優(yōu)化也稱為監(jiān)控優(yōu)化。下面我們來(lái)具體的說(shuō)一下,具體什么地方需要性能調(diào)優(yōu)?
五、什么地方需要性能調(diào)優(yōu)?(where)
在上面我們說(shuō)性能調(diào)優(yōu)只說(shuō)一些大的方面,包括硬件、操作系統(tǒng)、應(yīng)用程序這三大塊。
其實(shí)還有一塊就是程序本身的優(yōu)化,開(kāi)發(fā)人員根據(jù)需求開(kāi)發(fā)出來(lái)的程序本身就需要性能優(yōu)化,但對(duì)于我們運(yùn)維人員來(lái)說(shuō)接觸的比較少而已。下面我們就來(lái)看看這三大塊:
- 硬件 (CPU、內(nèi)存、磁盤、網(wǎng)卡)
- 操作系統(tǒng)(進(jìn)程、文件系統(tǒng)、內(nèi)核 ……)
- 應(yīng)用程序(Nginx、MySQL ……)
1.硬件
硬件優(yōu)化一般也包括兩塊:
- 上線前(硬件選型)
- 上線后(硬件擴(kuò)展)
一般項(xiàng)目搭建時(shí)都需要根據(jù)具體的應(yīng)用進(jìn)行硬件配置選型,在這方面需要一定的運(yùn)維經(jīng)驗(yàn)剛接觸的朋友可以在這方面有點(diǎn)欠缺,但沒(méi)事一般做過(guò)一兩個(gè)項(xiàng)目以后,對(duì)硬件配置選型也就會(huì)了,嘿嘿。
但有個(gè)不成文的經(jīng)驗(yàn),硬件配置還是越高越好(別說(shuō)是我說(shuō)的)。
我們?yōu)槭裁凑f(shuō)需要根據(jù)具體的應(yīng)用來(lái)選型呢,一方是什么樣的應(yīng)用需要什么樣的硬件配置,還有點(diǎn)很重要就是節(jié)約成本,錢得要在刀刃上不該花的錢我們不能亂花,也是為公司節(jié)約成本,實(shí)現(xiàn)資源利用***化。
上面我們說(shuō)的是項(xiàng)目搭建初期,你運(yùn)氣比較好項(xiàng)目一開(kāi)始你就在這邊。
一般有經(jīng)驗(yàn)的運(yùn)維工程師在硬件選型是不會(huì)有問(wèn)題的,所以我們?cè)谛阅軆?yōu)化時(shí)就不考慮硬件這塊,從理論上講我們服務(wù)器硬件配置一般不會(huì)出現(xiàn)在這種性能問(wèn)題上。
但是呢,由于我們業(yè)務(wù)做的越來(lái)越好,項(xiàng)目創(chuàng)建初期沒(méi)有考慮到會(huì)有這么大的性能需要(訪問(wèn)量),現(xiàn)在有的硬件不能滿足業(yè)務(wù)需求,所我們這時(shí)需要更換更好的CPU、更大的內(nèi)存和更快的磁盤。
至于如何找出硬件是性能瓶頸我們先在這里不細(xì)說(shuō),在后面的文章中我們將會(huì)細(xì)說(shuō)。***我們來(lái)看一張硬件架構(gòu)圖,能幫你更好的理解硬件優(yōu)化,如下圖(Dell R 710 架構(gòu)):
2.操作系統(tǒng)
下面我們來(lái)說(shuō)操作系統(tǒng),其實(shí)絕大部分的優(yōu)化都在操作系統(tǒng)和應(yīng)用程序的優(yōu)化,除了上線前的硬件選型和上線后的硬件擴(kuò)展,下面我們就來(lái)看看操作系統(tǒng)優(yōu)化包括哪些:
- 操作系統(tǒng)安裝優(yōu)化
- 系統(tǒng)初始化
- 進(jìn)程調(diào)優(yōu)
- 內(nèi)存調(diào)優(yōu)
- IO 調(diào)優(yōu)
- 文件系統(tǒng)調(diào)優(yōu)
- 網(wǎng)絡(luò)調(diào)化
下面我們來(lái)看一張圖,可以更直觀的幫且我們理解,如下圖:
3.應(yīng)用程序
***我們來(lái)說(shuō)說(shuō)應(yīng)用程序優(yōu)化,這里我們來(lái)說(shuō)一下MySQL優(yōu)化例子,讓大家更直觀的了解。
- MySQL 編譯安裝優(yōu)化
- MySQL 配置文件優(yōu)化
- 索引優(yōu)化
- MySQL 引擎優(yōu)化
- 查詢緩存優(yōu)化
- SQL 語(yǔ)句優(yōu)化
- 優(yōu)化表類型(MyISAM或InnoDB)
- 鎖機(jī)制優(yōu)化
- MySQL 服務(wù)器優(yōu)化(換SSD)
通達(dá)上面的對(duì)硬件、操作系統(tǒng)、應(yīng)用程序的具體說(shuō)明相信,大家對(duì)性能優(yōu)化有了更深層次的了解,下面我們來(lái)說(shuō)一個(gè)重要的問(wèn)題,什么人來(lái)進(jìn)行性能優(yōu)化?
六、什么人來(lái)進(jìn)行性能調(diào)優(yōu)?(who)
一說(shuō)起性能優(yōu)化我們***個(gè)想到的是運(yùn)維工程師,他們來(lái)進(jìn)行優(yōu)化。
其實(shí)我想說(shuō),這么說(shuō)是片面的性能優(yōu)化不僅僅是運(yùn)維工程師的事。
其實(shí)呢,性能優(yōu)化是一個(gè)團(tuán)隊(duì)的事。我為什么這么說(shuō)呢?
下面我們就來(lái)說(shuō)一下,大家想啊一公司需要做一項(xiàng)目,我們就拿最常見(jiàn)的電子商務(wù)中商城的項(xiàng)目來(lái)說(shuō)吧,公司確認(rèn)由于業(yè)務(wù)需要我們需要在網(wǎng)上做一個(gè)建材商城,那項(xiàng)目的具體流程是什么呢?可能不是很詳細(xì),但大體過(guò)程是樣的:
- 運(yùn)營(yíng)提出需求
- 產(chǎn)品整理需求
- 開(kāi)發(fā)開(kāi)發(fā)具體的業(yè)務(wù)應(yīng)用
- 運(yùn)維搭建開(kāi)發(fā)環(huán)境
- QA 進(jìn)行項(xiàng)目測(cè)試
- 運(yùn)維進(jìn)行項(xiàng)目上線
- 監(jiān)控進(jìn)行項(xiàng)目監(jiān)控
開(kāi)發(fā)一個(gè)具體的應(yīng)用需要運(yùn)營(yíng)部、產(chǎn)品部、開(kāi)發(fā)部、運(yùn)維部、QA (測(cè)試)、監(jiān)控等所以有部門的參加。
同樣的一個(gè)項(xiàng)目(業(yè)務(wù))存在性能問(wèn)題,不會(huì)只是運(yùn)維部門需要性能調(diào)優(yōu)而是所以部門一起解決這個(gè)性能問(wèn)題,這是缺一不可的。
可能出現(xiàn)在產(chǎn)品,也可能出現(xiàn)在程序上(*.php),也可能是業(yè)務(wù)需要本身就有問(wèn)題,也可能是運(yùn)維的環(huán)境搭建有問(wèn)題。但參加性能調(diào)優(yōu)的更多的是開(kāi)發(fā)、運(yùn)維、測(cè)試和監(jiān)控。
七、怎么樣進(jìn)行性能調(diào)優(yōu)?(How)
下面進(jìn)入正題了我們說(shuō)一說(shuō)怎么進(jìn)行性能調(diào)優(yōu),具體步驟如下:
- 性能指標(biāo) –> 確認(rèn)衡量標(biāo)準(zhǔn)
- 性能測(cè)試 –> 驗(yàn)證性能指標(biāo)
- 性能分析 –> 找出性能瓶頸
- 性能調(diào)優(yōu) –> 解決性能問(wèn)題
- 性能監(jiān)控 –> 檢驗(yàn)調(diào)優(yōu)效果
1.性能指標(biāo)
上面我們說(shuō)了,我們優(yōu)化的目的是為了獲得更好的性能,那么性能指標(biāo)是什么呢?我們?cè)趺礃觼?lái)衡量,一般衡量一個(gè)項(xiàng)目(這里指的網(wǎng)站)的指標(biāo)有三個(gè):
- 吞吐量 –> 是單位時(shí)間內(nèi)完成的用戶或系統(tǒng)的請(qǐng)求數(shù)量。
- 并發(fā)數(shù) –> 同時(shí)能接受多少用戶的訪問(wèn)請(qǐng)求
- 響應(yīng)時(shí)間 –> 用戶發(fā)出請(qǐng)求到收到響應(yīng)的時(shí)間間隔。
2.性能測(cè)試
我們做產(chǎn)品或者說(shuō)項(xiàng)目(更直白的說(shuō)是網(wǎng)站)目的是為了讓用戶使用,我們得先站在用戶的角度分析一下,用戶需要關(guān)注哪些性能。
對(duì)于用戶來(lái)說(shuō),當(dāng)點(diǎn)擊一個(gè)按鈕、鏈接或發(fā)出一個(gè)操作指令,到系統(tǒng)把請(qǐng)求處理好發(fā)給用戶并用網(wǎng)頁(yè)的形式展現(xiàn)出來(lái)為止,這個(gè)過(guò)程中所消耗的時(shí)間是用戶對(duì)這個(gè)網(wǎng)站性能的直觀印象。
也就是我們所說(shuō)的響應(yīng)時(shí)間,當(dāng)響應(yīng)時(shí)間較小時(shí),用戶體驗(yàn)相對(duì)來(lái)說(shuō)就會(huì)好,當(dāng)然用戶體驗(yàn)的響應(yīng)時(shí)間包括個(gè)人主觀因素和客觀響應(yīng)時(shí)間。
在網(wǎng)站開(kāi)發(fā)與搭建時(shí),我們就需要考慮到如何更好地結(jié)合這兩部分達(dá)到用戶***的體驗(yàn)。用戶關(guān)注的是用戶操作的相應(yīng)時(shí)間。
其次,我們站在運(yùn)維的角度考慮需要關(guān)注的性能點(diǎn)。再次,我們得站在開(kāi)發(fā)(設(shè)計(jì))人員角度去考慮網(wǎng)站性能。***,由QA測(cè)試與反饋我們網(wǎng)站性能。
經(jīng)過(guò)上述的說(shuō)明,我們來(lái)測(cè)試系統(tǒng)的性能,需要我們收集系統(tǒng)的吞吐量、并發(fā)數(shù)、響應(yīng)時(shí)間這三個(gè)重要的指標(biāo)。具體步驟是:
- 確認(rèn)吞吐量、并發(fā)數(shù)、響應(yīng)時(shí)間這三個(gè)值
- 找到或開(kāi)發(fā)相應(yīng)的性能測(cè)試工具
- 進(jìn)行性能測(cè)試
- 反饋結(jié)果并提交測(cè)試報(bào)告
結(jié)果,有兩個(gè)一種是達(dá)到我們預(yù)期的性能目標(biāo),這樣我們就不需要性能優(yōu)化任務(wù)完成可以交給運(yùn)維上線,只需要進(jìn)行相關(guān)的性能監(jiān)控,方便上線后進(jìn)行性能優(yōu)化。
另一種是沒(méi)有達(dá)到我們預(yù)期的目標(biāo),我們要查找性能瓶頸并進(jìn)行性能優(yōu)化。
3.性能分析
通過(guò)上面的性能測(cè)試,我們發(fā)現(xiàn)網(wǎng)站沒(méi)有達(dá)到我們預(yù)期定義的性能目標(biāo),這時(shí)我們需要做的就是對(duì)現(xiàn)有的系統(tǒng)(服務(wù)器)進(jìn)行監(jiān)控,包括硬件與軟件監(jiān)控,為性能調(diào)優(yōu)提供有效的性能監(jiān)控?cái)?shù)據(jù)。
下面我們重點(diǎn)來(lái)說(shuō)一下,用什么工具能找出性能瓶頸:
硬件:
- 用vmstat、sar、iostat檢測(cè)是否是CPU瓶頸
- 用free、vmstat檢測(cè)是否是內(nèi)存瓶頸
- 用iostat檢測(cè)是否是磁盤I/O瓶頸
- 用netstat檢測(cè)是否是網(wǎng)絡(luò)帶寬瓶
操作系統(tǒng):
- 進(jìn)程
- 文件系統(tǒng)
- SWAP 分區(qū)
- 內(nèi)核參數(shù)調(diào)整
- 應(yīng)用程序(MySQL等):
- mysqlreport 性能分析報(bào)告
- mysqlsla 慢查詢?nèi)罩痉治?/li>
4.性能調(diào)優(yōu)
- 確定調(diào)優(yōu)目標(biāo)
- 具體調(diào)優(yōu)步驟
- 檢測(cè)調(diào)優(yōu)結(jié)果
確定調(diào)優(yōu)目標(biāo)
我們性能優(yōu)化的目標(biāo)是網(wǎng)站性能提高10%還是20%,不能老大說(shuō)今天你給我優(yōu)化一下網(wǎng)站性能,你就能使用網(wǎng)站性能翻一倍。
首先,你要問(wèn)他我們需要達(dá)到一個(gè)怎么的目標(biāo)。
然后,我們要了解一下整個(gè)環(huán)境(架構(gòu))包括代碼(當(dāng)然你需要了解一下業(yè)務(wù)邏輯,大致了解一下,肯定沒(méi)壞處),有時(shí)間多和開(kāi)發(fā)溝通一下,問(wèn)問(wèn)代碼中有多少坑要填,這很重要。
往往他們優(yōu)一下代碼中的SQL查詢,比你優(yōu)化系統(tǒng)多少天都來(lái)的有效果,哈哈。
具體調(diào)優(yōu)步驟
- 如果你不懂系統(tǒng)的參數(shù),你千萬(wàn)不要對(duì)系統(tǒng)的參數(shù)進(jìn)行隨意的改動(dòng),不然你會(huì)后悔。
- 每次只對(duì)一種系統(tǒng)資源進(jìn)行系統(tǒng)調(diào)試,如CPU、或內(nèi)存、磁盤。
- 每次改動(dòng)盡量少的參數(shù)設(shè)置,推薦每次修改一個(gè)設(shè)置。
- 分析一項(xiàng)系統(tǒng)資源時(shí),使用多種工具,往往有意想不到的結(jié)果。
- 不及勝于過(guò)之(寧愿少做一點(diǎn),不要做過(guò)頭了,性能已達(dá)到要求就不要隨意亂動(dòng),做好你的監(jiān)控)。
檢測(cè)調(diào)優(yōu)結(jié)果
每次性能調(diào)優(yōu)后必須對(duì)性能進(jìn)程檢測(cè),如Web服務(wù)器的ab工具,就是一個(gè)很好的檢測(cè)工具,每次調(diào)優(yōu)后都能看到具體的變化。
5.性能監(jiān)控
性能監(jiān)控這個(gè)很重要,具體包括服務(wù)器性能監(jiān)控和具體服務(wù)的性能監(jiān)控。下面我們說(shuō)一說(shuō)具體有哪些性能監(jiān)控指標(biāo):
服務(wù)器的性能監(jiān)控
- CPU 使用率
- CPU負(fù)載
- 內(nèi)存使用率
- 磁盤I/O
- 網(wǎng)絡(luò)流量
- 磁盤空間
- 系統(tǒng)進(jìn)程
服務(wù)的性能監(jiān)控(MySQL)
- MySQL查詢吞吐率,包括Change DB、Select、Insert、Update、Delete
- MySQL持久連接利用率
- MySQL查詢緩存空間使用率
- MySQL查詢緩存***率
- MySQL緩存查詢數(shù)
- MySQL索引緩存***率
- MySQL索引讀取統(tǒng)計(jì)
- MySQL連接吞吐率
- MySQL連接緩存***率
- MySQL并發(fā)連接數(shù),包括***允許連接數(shù)、實(shí)際***連接數(shù)、當(dāng)前連接數(shù)、活躍連接數(shù)、緩存連接數(shù)
- MySQL流量統(tǒng)計(jì)
- MySQL表統(tǒng)計(jì)鎖定
八、總結(jié)
在這篇“性能優(yōu)化概述”的博文中我只是給大家講解一下具體的優(yōu)化思路,幫助大家理解性能優(yōu)化,這樣大家更容易理解一些,讓大家知道性能優(yōu)化并不是傳說(shuō)中的那么難,難到不可動(dòng)手去做,只要我們掌握好方法,什么難題都可以解決。
好了,說(shuō)了這么多。希望大家有所收獲吧^_^……