系統(tǒng)架構(gòu)性能優(yōu)化思路
互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù) 2T 有特別禮包
上一篇:朝陽(yáng)群眾盯上了望京A座?舉報(bào)996造成交通嚴(yán)重堵塞。996將成歷史?

系統(tǒng)性能問題分析流程

業(yè)務(wù)出現(xiàn)大并發(fā)的訪問,導(dǎo)致出現(xiàn)性能瓶頸 上線后的系統(tǒng)數(shù)據(jù)庫(kù)數(shù)據(jù)日積月累,數(shù)據(jù)量增加后出現(xiàn)性能瓶頸 其它關(guān)鍵環(huán)境改變,比如我們常說的網(wǎng)絡(luò)帶寬影響
在加壓測(cè)試過程中,我們還需要對(duì)CPU,內(nèi)存和JVM進(jìn)行監(jiān)控,觀察是否存在類似內(nèi)存泄漏無法釋放等情況,即并發(fā)下性能問題本身也可能是代碼本身原因?qū)е滦阅墚惓!?/p>
性能問題影響因素分析

對(duì)于性能問題影響因素,簡(jiǎn)單來說包括了硬件環(huán)境,軟件運(yùn)行環(huán)境和軟件程序三個(gè)方面的主要內(nèi)容。下面分別再展開說明下。
硬件環(huán)境
硬件環(huán)境就是我們常說的計(jì)算,存儲(chǔ)和網(wǎng)絡(luò)資源。

對(duì)于CPU,內(nèi)存,磁盤IO性能監(jiān)控和分析的一個(gè)思路可以參考:

運(yùn)行環(huán)境-數(shù)據(jù)庫(kù)和應(yīng)用中間件
數(shù)據(jù)庫(kù)和應(yīng)用中間件性能調(diào)優(yōu)是另外一個(gè)經(jīng)常出現(xiàn)性能問題的地方。
數(shù)據(jù)庫(kù)性能調(diào)優(yōu)

要調(diào)整首先就需要對(duì)數(shù)據(jù)庫(kù)性能進(jìn)行監(jiān)控
應(yīng)用中間件性能分析和調(diào)優(yōu)
應(yīng)用中間件容器即我們常說的Weblogic, Tomcat等應(yīng)用中間件容器或Web容器。應(yīng)用中間件調(diào)優(yōu)一個(gè)方面是本身的配置參數(shù)優(yōu)化設(shè)置,一個(gè)方面就是JVM內(nèi)存啟動(dòng)參數(shù)調(diào)優(yōu)。
對(duì)于JVM啟動(dòng)參數(shù)調(diào)優(yōu),往往也是應(yīng)用中間件調(diào)優(yōu)的一個(gè)關(guān)鍵點(diǎn),但是一般JVM參數(shù)調(diào)優(yōu)會(huì)結(jié)合應(yīng)用程序一起進(jìn)行分析。

其中JVM啟動(dòng)的主要控制參數(shù)說明如下:
-Xmx #設(shè)置最大堆空間
-Xms #設(shè)置最小堆空間
-XX:MaxNewSize #設(shè)置最大新生代空間
-XX:NewSize #設(shè)置最小新生代空間
-XX:MaxPermSize #設(shè)置最大永久代空間(注:新內(nèi)存模型已經(jīng)替換為Metaspace)
-XX:PermSize #設(shè)置最小永久代空間(注:新內(nèi)存模型已經(jīng)替換為Metaspace)
-Xss #設(shè)置每個(gè)線程的堆棧大小

年輕代Xmn的設(shè)置為老年代存活對(duì)象的1-1.5倍。
老年代的內(nèi)存大小設(shè)置為老年代存活對(duì)象的2-3倍。
對(duì)于JVM內(nèi)存溢出問題,我前面寫過一篇專門的分析文章可以參考。
從表象到根源-一個(gè)軟件系統(tǒng)JVM內(nèi)存溢出問題分析解決全過程
軟件程序性能問題分析
比如我們經(jīng)常看到的大量循環(huán)創(chuàng)建連接,資源使用了不釋放,SQL語(yǔ)句低效執(zhí)行等。
所有已知的問題都必須形成開發(fā)團(tuán)隊(duì)的開發(fā)規(guī)范要求,避免重復(fù)再犯。
業(yè)務(wù)系統(tǒng)性能問題擴(kuò)展思考
對(duì)于業(yè)務(wù)系統(tǒng)的性能優(yōu)化,除了上面談到的標(biāo)準(zhǔn)分析流程和分析要素外,再談下其它一些性能問題引發(fā)的關(guān)鍵思考。
上線前的性能測(cè)試是否有用?
有時(shí)候大家可能覺得奇怪,為何我們系統(tǒng)上線前都做了性能測(cè)試,為何上線后還是會(huì)出現(xiàn)系統(tǒng)性能問題。那么我們可以考慮下實(shí)際上我們上線前性能測(cè)試可能存在的一些無法真實(shí)模擬生產(chǎn)環(huán)境的地方,具體為:
硬件能否完全模擬真實(shí)環(huán)境?最好的性能測(cè)試往往是直接在搭建完成的生產(chǎn)環(huán)境進(jìn)行。
并發(fā)能否模擬真實(shí)場(chǎng)景?一個(gè)是需要錄制復(fù)合業(yè)務(wù)場(chǎng)景,一個(gè)是需要多臺(tái)壓測(cè)機(jī)。
而實(shí)際上我們?cè)谧鲂阅軠y(cè)試的時(shí)候以上幾個(gè)點(diǎn)都很難真正做到,因此要想完全模擬出生產(chǎn)真實(shí)環(huán)境是相當(dāng)困難的,這也導(dǎo)致了很多性能問題是在真正上線后才發(fā)現(xiàn)。
系統(tǒng)本身水平彈性擴(kuò)展是否完全解決性能問題?
單點(diǎn)訪問性能正常的時(shí)候可以擴(kuò)展集群來應(yīng)對(duì)大并發(fā)狀態(tài)下的同時(shí)訪問 單點(diǎn)訪問本身性能就有問題的時(shí)候,要優(yōu)先優(yōu)化單節(jié)點(diǎn)訪問性能
業(yè)務(wù)系統(tǒng)性能診斷的分類
對(duì)于業(yè)務(wù)系統(tǒng)性能診斷,如果從靜態(tài)角度我們可以考慮從以下三個(gè)方面進(jìn)行分類
操作系統(tǒng)和存儲(chǔ)層面 中間件層面(包括了數(shù)據(jù)庫(kù),應(yīng)用服務(wù)器中間件) 軟件層面(包括了數(shù)據(jù)庫(kù)SQL和存儲(chǔ)過程,邏輯層,前端展現(xiàn)層等)
比如我們常見的就是一個(gè)查詢功能如果出現(xiàn)問題了,首先就是找到這個(gè)查詢功能對(duì)應(yīng)的SQL語(yǔ)句在后臺(tái)查詢是否很慢,如果這個(gè)SQL本身就慢,那么就要優(yōu)化優(yōu)化SQL語(yǔ)句。如果SQL本身快但是查詢慢,那就要看下是否是前端性能問題或者集群?jiǎn)栴}等。
軟件代碼的問題往往是最不能忽視的一個(gè)性能問題點(diǎn)
對(duì)于業(yè)務(wù)系統(tǒng)性能問題,我們經(jīng)常想到的就是要擴(kuò)展數(shù)據(jù)庫(kù)的硬件性能,比如擴(kuò)展CPU和內(nèi)存,擴(kuò)展集群,但是實(shí)際上可以看到很多應(yīng)用的性能問題并不是硬件性能導(dǎo)致的,而是由于軟件代碼性能引起的。對(duì)于軟件代碼常見的性能問題我在以往的博客文章里面也談過到,比較典型的包括了。
循環(huán)中初始化大的結(jié)構(gòu)對(duì)象,數(shù)據(jù)庫(kù)連接等 資源不釋放導(dǎo)致的內(nèi)存泄露等 沒有基于場(chǎng)景需求來適度通過緩存等方式提升性能 長(zhǎng)周期事務(wù)處理耗費(fèi)資源 處理某一個(gè)業(yè)務(wù)場(chǎng)景或問題的時(shí)候,沒有選擇最優(yōu)的數(shù)據(jù)結(jié)構(gòu)或算法
通過IT資源監(jiān)控或APM應(yīng)用工具來發(fā)現(xiàn)性能問題

對(duì)于性能問題的發(fā)現(xiàn)一般有兩條路徑,一個(gè)就是通過我們IT資源的監(jiān)控,APM的性能監(jiān)控和預(yù)警來提前發(fā)現(xiàn)性能問題,一個(gè)是通過業(yè)務(wù)用戶在使用過程中的反饋來發(fā)現(xiàn)性能問題。
APM應(yīng)用性能管理主要指對(duì)企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用進(jìn)行監(jiān)測(cè)、優(yōu)化,提高企業(yè)應(yīng)用的可靠性和質(zhì)量,保證用戶得到良好的服務(wù),降低IT總擁有成本(TCO)。
資源池-》應(yīng)用層-》業(yè)務(wù)層
這個(gè)可以理解為APM的一個(gè)關(guān)鍵點(diǎn),原有的網(wǎng)管類監(jiān)控軟件更多的是資源和操作系統(tǒng)層面,包括計(jì)算和存儲(chǔ)資源的使用和利用率情況,網(wǎng)絡(luò)本身的性能情況等。但是當(dāng)要分析所有的資源層問題如何對(duì)應(yīng)到具體的應(yīng)用,對(duì)應(yīng)到具體的業(yè)務(wù)功能的時(shí)候很難。
而隨著DevOps和自動(dòng)化運(yùn)維的思路推進(jìn),我們更加希望是通過APM等工具主動(dòng)監(jiān)控來發(fā)現(xiàn)性能問題,對(duì)于APM工具最大的好處就是可以進(jìn)行服務(wù)全鏈路的性能分析,方便我們發(fā)現(xiàn)性能問題究竟發(fā)生在哪里。比如我們提交一個(gè)表單很慢,通過APM分析我們很容易發(fā)現(xiàn)究竟是調(diào)用哪個(gè)業(yè)務(wù)服務(wù)慢,或者是處理哪個(gè)SQL語(yǔ)句慢。這樣可以極大的提升我們性能問題分析診斷的效率。
感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。
正文結(jié)束
1.不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事
2.深圳一普通中學(xué)老師工資單曝光,秒殺程序員,網(wǎng)友:敢問是哪個(gè)學(xué)校畢業(yè)的?
3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧
5.清華大學(xué):2021 元宇宙研究報(bào)告!
6.為什么國(guó)內(nèi) 996 干不過國(guó)外的 955呢?

