成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談一談系統(tǒng)架構(gòu)的性能優(yōu)化思路

新聞 前端
今天談下業(yè)務(wù)系統(tǒng)性能問題分析診斷和性能優(yōu)化方面的內(nèi)容。 這篇文章重點(diǎn)還是談已經(jīng)上線的業(yè)務(wù)系統(tǒng)后續(xù)出現(xiàn)性能問題后的問題診斷和優(yōu)化重點(diǎn)。

[[436307]]

今天談下業(yè)務(wù)系統(tǒng)性能問題分析診斷和性能優(yōu)化方面的內(nèi)容。 這篇文章重點(diǎn)還是談已經(jīng)上線的業(yè)務(wù)系統(tǒng)后續(xù)出現(xiàn)性能問題后的問題診斷和優(yōu)化重點(diǎn)。

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

我們首先來分析下如果一個(gè)業(yè)務(wù)系統(tǒng)上線前沒有性能問題,而在上線后出現(xiàn)了比較嚴(yán)重的性能問題,那么實(shí)際上潛在的場景主要來自于以下幾個(gè)方面。

  • 業(yè)務(wù)出現(xiàn)大并發(fā)的訪問,導(dǎo)致出現(xiàn)性能瓶頸

  • 上線后的系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)日積月累,數(shù)據(jù)量增加后出現(xiàn)性能瓶頸

  • 其它關(guān)鍵環(huán)境改變,比如我們常說的網(wǎng)絡(luò)帶寬影響

正是由于這個(gè)原因,當(dāng)我們發(fā)現(xiàn)性能問題的時(shí)候,首先就需要判斷是單用戶非并發(fā)狀態(tài)下本身就有性能問題,還是說在并發(fā)狀態(tài)才存在性能問題。對于單用戶性能問題往往比較容易測試和驗(yàn)證,對于并發(fā)性能問題我們可以在測試環(huán)境進(jìn)行加壓測試和驗(yàn)證,以判斷并發(fā)下的性能。

如果是單用戶本身就存在性能問題,那么大部分問題都出在程序代碼和SQL需要進(jìn)一步優(yōu)化上面。如果是并發(fā)性能問題,我們就需要進(jìn)一步分析數(shù)據(jù)庫和中間件本身的狀態(tài),看是否需要對中間件進(jìn)行性能調(diào)優(yōu)。

在加壓測試過程中,我們還需要對CPU,內(nèi)存和JVM進(jìn)行監(jiān)控,觀察是否存在類似內(nèi)存泄漏無法釋放等情況,即并發(fā)下性能問題本身也可能是代碼本身原因?qū)е滦阅墚惓!?/p>

性能問題影響因素分析

對于性能問題影響因素,簡單來說包括了硬件環(huán)境,軟件運(yùn)行環(huán)境和軟件程序三個(gè)方面的主要內(nèi)容。下面分別再展開說明下。

-      硬件環(huán)境     -

硬件環(huán)境就是我們常說的計(jì)算,存儲和網(wǎng)絡(luò)資源。

對于服務(wù)器的計(jì)算能力,一般來說廠家都會提供TPMC參數(shù)作為一個(gè)參考數(shù)據(jù),但是我們實(shí)際看到相同TPMC能力下的X86服務(wù)器能力仍然低于小型機(jī)的能力。

除了服務(wù)器的計(jì)算能力參數(shù),另外一個(gè)重點(diǎn)就是我們說的存儲設(shè)備,影響到存儲的重點(diǎn)又是IO讀寫性能問題。有時(shí)候我們監(jiān)控發(fā)現(xiàn)CPU和內(nèi)存居高不下,而真正的瓶頸通過分析反而發(fā)現(xiàn)是由于IO瓶頸導(dǎo)致,由于讀寫性能跟不上,導(dǎo)致大量數(shù)據(jù)無法快速持久化并釋放內(nèi)存資源。

比如在Linux環(huán)境下,本身也提供了性能監(jiān)控工具方便進(jìn)行性能分析。比如常用的iostat,ps,sar,top,vmstat等,這些工具可以對CPU,內(nèi)存,JVM,磁盤IO等進(jìn)行性能監(jiān)控和分析,以發(fā)現(xiàn)真正的性能問題在哪里。

比如我們常說的內(nèi)存使用率持續(xù)告警,你就必須發(fā)現(xiàn)是高并發(fā)調(diào)用導(dǎo)致,還是JVM內(nèi)存泄漏導(dǎo)致,還是本身由于磁盤IO瓶頸導(dǎo)致。

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

運(yùn)行環(huán)境-數(shù)據(jù)庫和應(yīng)用中間件

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

-      數(shù)據(jù)庫調(diào)優(yōu)     -

拿Oracle數(shù)據(jù)庫來說,影響數(shù)據(jù)庫性能的因素包括:系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡(luò)。數(shù)據(jù)庫的優(yōu)化包括:優(yōu)化數(shù)據(jù)庫磁盤I/O、優(yōu)化回滾段、優(yōu)化Rrdo日志、優(yōu)化系統(tǒng)全局區(qū)、優(yōu)化數(shù)據(jù)庫對象。

要調(diào)整首先就需要對數(shù)據(jù)庫性能進(jìn)行監(jiān)控。

我們可以在init.ora參數(shù)文件中設(shè)置TIMED_STATISTICS=TRUE 和在你的會話層設(shè)置ALTER SESSION SET STATISTICS=TRUE 。運(yùn)行svrmgrl 用 connect internal 注冊,在你的應(yīng)用系統(tǒng)正常活動期間,運(yùn)行utlbstat.sql 開始統(tǒng)計(jì)系統(tǒng)活動,達(dá)到一定的時(shí)間后,執(zhí)行utlestat.sql 停止統(tǒng)計(jì)。統(tǒng)計(jì)結(jié)果將產(chǎn)生在report.txt 文件中。

數(shù)據(jù)庫性能優(yōu)化應(yīng)該是一個(gè)持續(xù)性的工作,一個(gè)方面是本身的性能和參數(shù)巡檢,另外一個(gè)方面就是DBA也會經(jīng)常提取最占用內(nèi)存的低效SQL語句給開發(fā)人員進(jìn)一步分析,同時(shí)也會從數(shù)據(jù)庫本身的以下告警KPI指標(biāo)中發(fā)現(xiàn)問題。

比如我們可能會發(fā)現(xiàn)Oracle數(shù)據(jù)庫出現(xiàn)內(nèi)存使用率高的告警,而通過檢查會發(fā)現(xiàn)是產(chǎn)生了大量的Redo日志導(dǎo)致,那么我們就需要從程序上進(jìn)一步分析為何會產(chǎ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)存啟動參數(shù)調(diào)優(yōu)。

對于應(yīng)用中間件本身的參數(shù)設(shè)置,主要包括了JVM啟動參數(shù)設(shè)置,線程池設(shè)置,連接數(shù)的最小最大值設(shè)置等。如果是集群環(huán)境,還涉及到集群相關(guān)的配置調(diào)優(yōu)。

對于JVM啟動參數(shù)調(diào)優(yōu),往往也是應(yīng)用中間件調(diào)優(yōu)的一個(gè)關(guān)鍵點(diǎn),但是一般JVM參數(shù)調(diào)優(yōu)會結(jié)合應(yīng)用程序一起進(jìn)行分析。

比如我們常見的JVM堆內(nèi)存溢出,如果程序代碼沒有內(nèi)存泄漏問題的話,我就需要考慮調(diào)整JVM啟動時(shí)候堆內(nèi)存設(shè)置。在32位操作系統(tǒng)下只能夠設(shè)置到4G,但是在64位操作系統(tǒng)下已經(jīng)可以設(shè)置到8G甚至更大的值。

其中JVM啟動的主要控制參數(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è)線程的堆棧大小

Java整個(gè)堆大小設(shè)置,Xmx 和 Xms設(shè)置為老年代存活對象的3-4倍,即FullGC之后的老年代內(nèi)存占用的3-4倍。永久代 PermSize和MaxPermSize設(shè)置為老年代存活對象的1.2-1.5倍。

年輕代Xmn的設(shè)置為老年代存活對象的1-1.5倍。

老年代的內(nèi)存大小設(shè)置為老年代存活對象的2-3倍。

注意在新的JVM內(nèi)存模型下已經(jīng)沒有PermSize而是變化為Metaspace,因此需要考慮Heap內(nèi)存和Metaspace大小的配比,同時(shí)還需要考慮相關(guān)的垃圾回收機(jī)制是采用哪種類型等。

對于JVM內(nèi)存溢出問題,我前面寫過一篇專門的分析文章可以參考。

軟件程序性能問題分析

在這里首先要強(qiáng)調(diào)的一點(diǎn)就是,當(dāng)我們發(fā)現(xiàn)性能問題后首先想到的就是擴(kuò)展資源,但是大部分的性能問題本身并不是資源能力不夠?qū)е拢俏覀兂绦驅(qū)崿F(xiàn)上出現(xiàn)明顯缺陷。

比如我們經(jīng)常看到的大量循環(huán)創(chuàng)建連接,資源使用了不釋放,SQL語句低效執(zhí)行等。

為了解決這些性能問題,最好的方法仍然是在事前控制。其中包括了事前的代碼靜態(tài)檢查工具的使用,也包括了開發(fā)團(tuán)隊(duì)對代碼進(jìn)行的Code Review來發(fā)現(xiàn)性能問題。

所有已知的問題都必須形成開發(fā)團(tuán)隊(duì)的開發(fā)規(guī)范要求,避免重復(fù)再犯。

業(yè)務(wù)系統(tǒng)性能問題擴(kuò)展思考

對于業(yè)務(wù)系統(tǒng)的性能優(yōu)化,除了上面談到的標(biāo)準(zhǔn)分析流程和分析要素外,再談下其它一些性能問題引發(fā)的關(guān)鍵思考。

上線前的性能測試是否有用?

有時(shí)候大家可能覺得奇怪,為何我們系統(tǒng)上線前都做了性能測試,為何上線后還是會出現(xiàn)系統(tǒng)性能問題。那么我們可以考慮下實(shí)際上我們上線前性能測試可能存在的一些無法真實(shí)模擬生產(chǎn)環(huán)境的地方,具體為:

  • 硬件能否完全模擬真實(shí)環(huán)境?最好的性能測試往往是直接在搭建完成的生產(chǎn)環(huán)境進(jìn)行。

  • 數(shù)據(jù)量能否模擬實(shí)際場景?真實(shí)場景往往是多個(gè)業(yè)務(wù)表都已經(jīng)存在大數(shù)據(jù)量的積累而非空表。

  • 并發(fā)能否模擬真實(shí)場景?一個(gè)是需要錄制復(fù)合業(yè)務(wù)場景,一個(gè)是需要多臺壓測機(jī)。

而實(shí)際上我們在做性能測試的時(shí)候以上幾個(gè)點(diǎn)都很難真正做到,因此要想完全模擬出生產(chǎn)真實(shí)環(huán)境是相當(dāng)困難的,這也導(dǎo)致了很多性能問題是在真正上線后才發(fā)現(xiàn)。

系統(tǒng)本身水平彈性擴(kuò)展是否完全解決性能問題?

第二個(gè)點(diǎn)也是我們經(jīng)常談的比較多的點(diǎn),就是我們的業(yè)務(wù)系統(tǒng)在進(jìn)行架構(gòu)設(shè)計(jì)的時(shí)候,特別是面對非功能性需求,我們都會談到系統(tǒng)本身的數(shù)據(jù)庫,中間件都采用了集群技術(shù),能夠做到彈性水平擴(kuò)展。那么這種彈性水平擴(kuò)展能力是否又真正解決了性能問題?

實(shí)際上我們看到對于數(shù)據(jù)庫往往很難真正做到無限的彈性水平擴(kuò)展,即使對于Oracle RAC集群往往也是最多擴(kuò)展到單點(diǎn)的2到3倍性能。對于應(yīng)用集群往往可以做到彈性水平擴(kuò)展,當(dāng)前技術(shù)也比較成熟。

當(dāng)中間件能夠做到完全彈性擴(kuò)展的時(shí)候,實(shí)際上仍然可能存在性能問題,即隨著我們系統(tǒng)的運(yùn)行和業(yè)務(wù)數(shù)據(jù)量的不斷積累增值。實(shí)際上你可以看到往往非并發(fā)狀態(tài)下的單用戶訪問本身就很慢,而不是說并發(fā)上來后慢。因此也是我們常說的要給點(diǎn),即:

  • 單點(diǎn)訪問性能正常的時(shí)候可以擴(kuò)展集群來應(yīng)對大并發(fā)狀態(tài)下的同時(shí)訪問

  • 單點(diǎn)訪問本身性能就有問題的時(shí)候,要優(yōu)先優(yōu)化單節(jié)點(diǎn)訪問性能

業(yè)務(wù)系統(tǒng)性能診斷的分類

對于業(yè)務(wù)系統(tǒng)性能診斷,如果從靜態(tài)角度我們可以考慮從以下三個(gè)方面進(jìn)行分類

  • 操作系統(tǒng)和存儲層面

  • 中間件層面(包括了數(shù)據(jù)庫,應(yīng)用服務(wù)器中間件)

  • 軟件層面(包括了數(shù)據(jù)庫SQL和存儲過程,邏輯層,前端展現(xiàn)層等)

那么一個(gè)業(yè)務(wù)系統(tǒng)應(yīng)用功能出現(xiàn)問題了,我們當(dāng)然也可以從動態(tài)層面來看實(shí)際一個(gè)應(yīng)用請求從調(diào)用開始究竟經(jīng)過了哪些代碼和硬件基礎(chǔ)設(shè)施,通過分段方法來定位和查詢問題。

比如我們常見的就是一個(gè)查詢功能如果出現(xiàn)問題了,首先就是找到這個(gè)查詢功能對應(yīng)的SQL語句在后臺查詢是否很慢,如果這個(gè)SQL本身就慢,那么就要優(yōu)化優(yōu)化SQL語句。如果SQL本身快但是查詢慢,那就要看下是否是前端性能問題或者集群問題等。

軟件代碼的問題往往是最不能忽視的一個(gè)性能問題點(diǎn)

對于業(yè)務(wù)系統(tǒng)性能問題,我們經(jīng)常想到的就是要擴(kuò)展數(shù)據(jù)庫的硬件性能,比如擴(kuò)展CPU和內(nèi)存,擴(kuò)展集群,但是實(shí)際上可以看到很多應(yīng)用的性能問題并不是硬件性能導(dǎo)致的,而是由于軟件代碼性能引起的。對于軟件代碼常見的性能問題我在以往的博客文章里面也談過到,比較典型的包括了。

  • 循環(huán)中初始化大的結(jié)構(gòu)對象,數(shù)據(jù)庫連接等

  • 資源不釋放導(dǎo)致的內(nèi)存泄露等

  • 沒有基于場景需求來適度通過緩存等方式提升性能

  • 長周期事務(wù)處理耗費(fèi)資源

  • 處理某一個(gè)業(yè)務(wù)場景或問題的時(shí)候,沒有選擇最優(yōu)的數(shù)據(jù)結(jié)構(gòu)或算法

以上都是常見的一些軟件代碼性能問題點(diǎn),而這些往往需要通過我們進(jìn)行Code Review或代碼評審的方式才能夠發(fā)現(xiàn)出來。因此如果要做全面的性能優(yōu)化,對于軟件代碼的性能問題排查是必須的。

通過IT資源監(jiān)控或APM應(yīng)用工具來發(fā)現(xiàn)性能問題

對于性能問題的發(fā)現(xiàn)一般有兩條路徑,一個(gè)就是通過我們IT資源的監(jiān)控,APM的性能監(jiān)控和預(yù)警來提前發(fā)現(xiàn)性能問題,一個(gè)是通過業(yè)務(wù)用戶在使用過程中的反饋來發(fā)現(xiàn)性能問題。

APM應(yīng)用性能管理主要指對企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用進(jìn)行監(jiān)測、優(yōu)化,提高企業(yè)應(yīng)用的可靠性和質(zhì)量,保證用戶得到良好的服務(wù),降低IT總擁有成本(TCO)。

-      APM 核心     -

資源池-》應(yīng)用層-》業(yè)務(wù)層

這個(gè)可以理解為APM的一個(gè)關(guān)鍵點(diǎn),原有的網(wǎng)管類監(jiān)控軟件更多的是資源和操作系統(tǒng)層面,包括計(jì)算和存儲資源的使用和利用率情況,網(wǎng)絡(luò)本身的性能情況等。但是當(dāng)要分析所有的資源層問題如何對應(yīng)到具體的應(yīng)用,對應(yīng)到具體的業(yè)務(wù)功能的時(shí)候很難。

傳統(tǒng)模式下,當(dāng)出現(xiàn)CPU或內(nèi)存滿負(fù)荷的時(shí)候,如果要查找到具體是哪個(gè)應(yīng)用,哪個(gè)進(jìn)程或者具體哪個(gè)業(yè)務(wù)功能,哪個(gè)sql語句導(dǎo)致的往往并不是容易的事情。在實(shí)際的性能問題優(yōu)化中往往也需要做大量的日志分析和問題定位,最終才可能找到問題點(diǎn)。

比如在我們最近的項(xiàng)目實(shí)施中,結(jié)合APM和服務(wù)鏈監(jiān)控,我們可以快速的發(fā)現(xiàn)究竟是哪個(gè)服務(wù)調(diào)用出現(xiàn)了性能問題,或者快速的定位出哪個(gè)SQL語句有驗(yàn)證的性能問題。這個(gè)都可以幫助我們快速的進(jìn)行性能問題分析和診斷。

資源上承載的是應(yīng)用,應(yīng)用本身又包括了數(shù)據(jù)庫和應(yīng)用中間件容器,同時(shí)也包括了前端;在應(yīng)用之上則是對應(yīng)到具體的業(yè)務(wù)功能。因此APM一個(gè)核心就是要將資源-》應(yīng)用-》功能之間進(jìn)行整合分析和銜接。

而隨著DevOps和自動化運(yùn)維的思路推進(jìn),我們更加希望是通過APM等工具主動監(jiān)控來發(fā)現(xiàn)性能問題,對于APM工具最大的好處就是可以進(jìn)行服務(wù)全鏈路的性能分析,方便我們發(fā)現(xiàn)性能問題究竟發(fā)生在哪里。比如我們提交一個(gè)表單很慢,通過APM分析我們很容易發(fā)現(xiàn)究竟是調(diào)用哪個(gè)業(yè)務(wù)服務(wù)慢,或者是處理哪個(gè)SQL語句慢。這樣可以極大的提升我們性能問題分析診斷的效率。

 

責(zé)任編輯:張燕妮 來源: 架構(gòu)之美
相關(guān)推薦

2022-11-10 08:16:19

java性能服務(wù)性能

2021-02-19 09:19:11

消息隊(duì)列場景

2018-08-21 14:42:29

閃存存在問題

2021-07-28 20:12:17

WindowsHeap內(nèi)存

2019-11-12 08:40:03

RocketMQ架構(gòu)

2022-02-14 22:22:30

單元測試Junit5

2022-07-04 10:51:27

數(shù)據(jù)中臺數(shù)據(jù)倉庫

2014-07-17 10:11:53

Android LAPI谷歌

2021-02-06 09:40:11

LinuxCPU高性能

2021-05-11 08:48:23

React Hooks前端

2011-08-24 17:55:46

SQL Server

2015-03-27 15:07:55

云計(jì)算IaaS平臺Docker

2017-11-21 14:32:05

容器持久存儲

2016-07-08 13:33:12

云計(jì)算

2022-03-02 11:13:50

Web前端開發(fā)

2021-03-15 22:42:25

NameNodeDataNode分布式

2011-07-28 09:22:56

Oracle WDPOracle數(shù)據(jù)庫

2019-01-30 10:59:48

IPv6Happy EyebaIPv4

2018-08-28 06:42:06

邊緣計(jì)算SDNMEC

2020-06-19 15:32:56

HashMap面試代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 超碰在线97国产 | 亚洲天堂中文字幕 | 亚洲一区欧美一区 | 国产精品久久视频 | 看片地址 | 国产精品日本一区二区不卡视频 | 九九热在线视频免费观看 | 日韩免费视频一区二区 | 奇米四色影视 | 欧美精品一二区 | 在线免费观看日本 | 日日干干 | 一区二区手机在线 | 中文字幕免费在线 | 一区二区在线 | 精品小视频 | 国产精品欧美一区二区三区不卡 | 久久久久网站 | 毛片链接| 欧美 视频 | 成人高清在线视频 | 久久久久久久久久久久91 | 欧美久久久久 | 日日操视频 | 99精品视频一区二区三区 | 国产精品视频偷伦精品视频 | 国产激情在线播放 | 亚洲一区二区免费 | 国产免费va | 成人黄色av网站 | 九九热精品视频在线观看 | 成年人视频在线免费观看 | 久久r免费视频 | 亚洲视频一区在线观看 | 毛片网站在线观看视频 | 欧美成人a∨高清免费观看 欧美日韩中 | 色视频免费 | 天天干天天谢 | 99爱视频| 一区视频| 草久久久 |