性能分析-步驟與調(diào)優(yōu)

性能分析

1.前提
性能分析的前提除了需要豐富的性能測(cè)試監(jiān)控(如PTS(Performance Testing Service)自身的客戶側(cè)監(jiān)控牲览、基礎(chǔ)類監(jiān)控-阿里云監(jiān)控徽惋、應(yīng)用類 監(jiān)控-ARMS監(jiān)控等)惩坑,還需要具備相關(guān)的技術(shù)知識(shí)(包括但不限于:操作系統(tǒng)、中間件泽篮、數(shù)據(jù)庫(kù)唐断、開發(fā)等)。

2.流程

  • a : 跟進(jìn)以往經(jīng)驗(yàn)澎怒,出現(xiàn)TPS不達(dá)標(biāo)的情況褒搔,優(yōu)先查看硬件資源使用率,可以很快速直觀的看到資源使用情況來深入分析喷面,例如應(yīng)用服務(wù)器 和 數(shù)據(jù)庫(kù)服務(wù)器 的CPU星瘾,Memory,Disk I/O惧辈,Network I/O琳状,如果是某個(gè)硬件指標(biāo)有問題,需要深入的進(jìn)行分析盒齿。
    監(jiān)控工具:阿里云念逞、亞馬遜云 或 自己搭建的grafana等平臺(tái)均可以監(jiān)控。

  • b: 如果說上面步驟資源消耗正常边翁,沒有出現(xiàn)飆高的情況翎承,可以先從網(wǎng)絡(luò)接入層開始進(jìn)行分析。很多情況下壓測(cè)流量并沒有完全進(jìn)入到后端(服務(wù)端)符匾,在網(wǎng)絡(luò)接入層(云化的架構(gòu),例如:SLB/WAF/高防IP,甚至是CDN/全站加速等)可能就會(huì)出現(xiàn)由于各種規(guī)格(帶寬甸各、最大連接數(shù)垛贤、新建連接數(shù)等)限制或者因?yàn)閴簻y(cè)的某些特征符合DDoS(Distributed Denial of Service分布式阻斷服務(wù))的行為而觸發(fā)了防護(hù)策略導(dǎo)致壓測(cè)結(jié)果達(dá)不到預(yù)期。

  • c: 接著看關(guān)鍵指標(biāo)是否滿足要求趣倾,如果不滿足聘惦,需要確定是哪個(gè)地方有問題,一般情況下誊酌,服務(wù)器端問題可能性比較大部凑,也有可能是客戶端問題(這種情況非常小)碧浊。

  • d: 如果硬件指標(biāo)都沒有問題,需要查看中間件相關(guān)指標(biāo)瘟仿,例如:線程池箱锐、連接池、GC等劳较,如果是這些指標(biāo)問題驹止,需要深入的分析。

  • e: 如果中間件相關(guān)指標(biāo)沒問題观蜗,需要查看數(shù)據(jù)庫(kù)相關(guān)指標(biāo)臊恋,例如:慢查SQL、命中率墓捻、鎖抖仅、參數(shù)設(shè)置。

  • f: 如果以上指標(biāo)都正常砖第,應(yīng)用程序的算法撤卢、緩沖、緩存梧兼、同步或異步可能有問題放吩,需要具體深入的分析。

    image.png

3.可能瓶頸點(diǎn)

  • 硬件羽杰、規(guī)格上的瓶頸
    一般指的是CPU渡紫、內(nèi)存、磁盤I/O方面的問題考赛,分為服務(wù)器硬件瓶頸惕澎、網(wǎng)絡(luò)瓶頸(對(duì)局域網(wǎng)可以不考慮)。

  • 中間件上的性能瓶頸
    一般指的是應(yīng)用服務(wù)器欲虚、web服務(wù)器等應(yīng)用軟件集灌,還包括數(shù)據(jù)庫(kù)系統(tǒng)。 例如:中間件weblogic平臺(tái)上配置的JDBC連接池的參數(shù)設(shè)置不合理,造成的瓶頸欣喧。

  • 應(yīng)用程序上的性能瓶頸
    一般指的是開發(fā)人員開發(fā)出來的應(yīng)用程序腌零。 例如,JVM參數(shù)不合理唆阿,容器配置不合理益涧,慢SQL(可使用阿里云APM類產(chǎn)品如ARMS協(xié)助定位),數(shù)據(jù)庫(kù)設(shè)計(jì)不合理驯鳖,程序架構(gòu)規(guī)劃不合理闲询,程序本身設(shè)計(jì)有問題(串行處理、請(qǐng)求的處理線程不夠浅辙、無緩沖扭弧、無緩存、生產(chǎn)者和消費(fèi)者不協(xié)調(diào)等)记舆,造成系統(tǒng)在大量用戶訪問時(shí)性能低下而造成的瓶頸鸽捻。

  • 操作系統(tǒng)上的性能瓶頸
    一般指的是windows、UNIX泽腮、Linux等操作系統(tǒng)御蒲。 例如,在進(jìn)行性能測(cè)試诊赊,出現(xiàn)物理內(nèi)存不足時(shí)厚满,虛擬內(nèi)存設(shè)置也不合理,虛擬內(nèi)存的交換效率就會(huì)大大降低碧磅,從而導(dǎo)致行為的響應(yīng)時(shí)間大大增加碘箍,這時(shí)認(rèn)為操作系統(tǒng)上出現(xiàn)性能瓶頸。

  • 網(wǎng)絡(luò)設(shè)備上的性能瓶頸
    一般指的是防火墻续崖、動(dòng)態(tài)負(fù)載均衡器敲街、交換機(jī)等設(shè)備。當(dāng)前更多的云化服務(wù)架構(gòu)使用的網(wǎng)絡(luò)接入產(chǎn)品:包括但不限于SLB严望、WAF多艇、高防IP、CDN像吻、全站加速等等峻黍。 例如,在動(dòng)態(tài)負(fù)載均衡器上設(shè)置了動(dòng)態(tài)分發(fā)負(fù)載的機(jī)制拨匆,當(dāng)發(fā)現(xiàn)某個(gè)應(yīng)用服務(wù)器上的硬件資源已經(jīng)到達(dá)極限時(shí)姆涩,動(dòng)態(tài)負(fù)載均衡器將后續(xù)的交易請(qǐng)求發(fā)送到其他負(fù)載較輕的應(yīng)用服務(wù)器上。在測(cè)試時(shí)發(fā)現(xiàn)惭每,動(dòng)態(tài)負(fù)載均衡器沒有起到相應(yīng)的作用骨饿,這時(shí)可以認(rèn)為網(wǎng)絡(luò)瓶頸亏栈。

4.方法

  • CPU
    CPU資源利用率很高的話,需要看CPU消耗User宏赘、Sys绒北、Wait哪種狀態(tài)。

    • 如果CPU User非常高察署,需要查看消耗在哪個(gè)進(jìn)程闷游,可以用top(linux)命令看出,接著用top –H –p <pid>看哪個(gè)線程消耗資源高贴汪。如果是Java應(yīng)用脐往,就可以用jstack看出此線程正在執(zhí)行的堆棧,看資源消耗在哪個(gè)方法上扳埂,查看源代碼就知道問題所在业簿;如果是c++應(yīng)用,可以用gprof性能工具進(jìn)行分析聂喇。
    • 如果CPU Sys非常高辖源,可以用strace(linux)看系統(tǒng)調(diào)用的資源消耗及時(shí)間。
    • 如果CPU Wait非常高希太,考慮磁盤讀寫了,可以通過減少日志輸出酝蜒、異步或換速度快的硬盤誊辉。
  • Memory
    操作系統(tǒng)為了最大化利用內(nèi)存,一般都設(shè)置大量的cache亡脑,因此堕澄,內(nèi)存利用率高達(dá)99%并不是問題,內(nèi)存的問題主要看某個(gè)進(jìn)程占用的內(nèi)存是否非常大以及是否有大量的swap(虛擬內(nèi)存交換)霉咨。

  • 磁盤I/O
    磁盤I/O一個(gè)最顯著的指標(biāo)是繁忙率蛙紫,可以通過減少日志輸出、異步或換速度快的硬盤來降低繁忙率途戒。

  • 網(wǎng)絡(luò)I/O
    網(wǎng)絡(luò)I/O主要考慮傳輸內(nèi)容大小坑傅,不能超過硬件網(wǎng)絡(luò)傳輸?shù)淖畲笾?0%,可以通過壓縮減少內(nèi)容大小喷斋、在本地設(shè)置緩存以及分多次傳輸?shù)炔僮魈岣呔W(wǎng)絡(luò)I/O性能唁毒。

  • 內(nèi)核參數(shù)
    內(nèi)核參數(shù)一般都有默認(rèn)值,這些內(nèi)核參數(shù)默認(rèn)值對(duì)于一般系統(tǒng)沒問題星爪,但是對(duì)于壓力測(cè)試來說浆西,可能運(yùn)行的參數(shù)將會(huì)超過內(nèi)核參數(shù),導(dǎo)致系統(tǒng)出現(xiàn)問題顽腾,可以用sysctl來查看及修改近零。

  • JVM
    JVM主要分析GC/FULL GC是否頻繁,以及垃圾回收的時(shí)間,可以用jstat命令來查看久信,對(duì)于每個(gè)代大小以及GC頻繁窖杀,通過jmap將內(nèi)存轉(zhuǎn)儲(chǔ),再借助工具HeapAnalyzer來分析哪地方占用的內(nèi)存較高以及是否有內(nèi)存泄漏可能入篮。簡(jiǎn)單點(diǎn)可以使用APM工具陈瘦,例如阿里云ARMS。

  • 線程池
    如果線程不夠用潮售,可以通過參數(shù)調(diào)整痊项,增加線程;對(duì)于線程池中的線程設(shè)置比較大的情況酥诽,還是不夠用可能的原因是:某個(gè)線程被阻塞來不及釋放鞍泉,可能在等鎖、方法耗時(shí)較長(zhǎng)肮帐、數(shù)據(jù)庫(kù)等待時(shí)間很長(zhǎng)等原因?qū)е驴裕枰M(jìn)一步分析才能定位。

  • JDBC連接池
    連接池不夠用的情況下训枢,可以通過參數(shù)進(jìn)行調(diào)整增加托修;但是對(duì)于數(shù)據(jù)庫(kù)本身處理很慢的情況下,調(diào)整沒有多大的效果恒界,需要查看數(shù)據(jù)庫(kù)方面以及因代碼導(dǎo)致連接未釋放的原因睦刃。

  • SQL
    SQL效率低下也是導(dǎo)致性能差的一個(gè)非常重要的原因,可以通過查看執(zhí)行計(jì)劃看SQL慢在哪里十酣,一般情況涩拙,SQL效率低下原因主要有:


    SQL問題列表

調(diào)優(yōu)

1.調(diào)優(yōu)步驟

  • 確定問題
    應(yīng)用程序代碼:在通常情況下,很多程序的性能問題都是寫出來的耸采,因此對(duì)于發(fā)現(xiàn)瓶頸的模塊兴泥,應(yīng)該首先檢查一下代碼。
    數(shù)據(jù)庫(kù)配置:經(jīng)常引起整個(gè)系統(tǒng)運(yùn)行緩慢虾宇,一些諸如大型數(shù)據(jù)庫(kù)都是需要DBA進(jìn)行正確的參數(shù)調(diào)整才能投產(chǎn)的搓彻。
    操作系統(tǒng)配置:不合理就可能引起系統(tǒng)瓶頸。
    硬件設(shè)置:硬盤速度文留、內(nèi)存大小等都是容易引起瓶頸的原因好唯,因此這些都是分析的重點(diǎn)。
    網(wǎng)絡(luò):網(wǎng)絡(luò)負(fù)載過重導(dǎo)致網(wǎng)絡(luò)沖突和網(wǎng)絡(luò)延遲燥翅。

  • 分析問題
    當(dāng)確定了問題之后骑篙,我們要明確這個(gè)問題影響的是響應(yīng)時(shí)間吞吐量,還是其他問題森书?
    是多數(shù)用戶還是少數(shù)用戶遇到了問題靶端?如果是少數(shù)用戶谎势,這幾個(gè)用戶與其它用戶的操作有什么不同?
    系統(tǒng)資源監(jiān)控的結(jié)果是否正常杨名?CPU的使用是否到達(dá)極限脏榆?I/O情況如何?
    問題是否集中在某一類模塊中台谍?
    是客戶端還是服務(wù)器出現(xiàn)問題须喂? 系統(tǒng)硬件配置是否夠用?
    實(shí)際負(fù)載是否超過了系統(tǒng)的負(fù)載能力趁蕊? 是否未對(duì)系統(tǒng)進(jìn)行優(yōu)化坞生?
    通過這些分析及一些與系統(tǒng)相關(guān)的問題,可以對(duì)系統(tǒng)瓶頸有更深入的了解掷伙,進(jìn)而分析出真正的原因是己。

  • 確定調(diào)整目標(biāo)和解決方案
    高系統(tǒng)吞吐量,縮短響應(yīng)時(shí)間任柜,更好地支持并發(fā)卒废。

  • 測(cè)試解決方案
    對(duì)通過解決方案調(diào)優(yōu)后的系統(tǒng)進(jìn)行基準(zhǔn)測(cè)試。(基準(zhǔn)測(cè)試是指通過設(shè)計(jì)科學(xué)的測(cè)試方法宙地、測(cè)試工具和測(cè)試系統(tǒng)摔认,實(shí)現(xiàn)對(duì)一類測(cè)試對(duì)象的某項(xiàng)性能指標(biāo)進(jìn)行定量的和可對(duì)比的測(cè)試)。

  • 分析調(diào)優(yōu)結(jié)果
    系統(tǒng)調(diào)優(yōu)是否達(dá)到或者超出了預(yù)定目標(biāo)宅粥;系統(tǒng)是整體性能得到了改善级野,還是以系統(tǒng)某部分性能來解決其他問題;調(diào)優(yōu)是否可以結(jié)束了粹胯。 最后,如果達(dá)到了預(yù)期目標(biāo)辰企,調(diào)優(yōu)工作可以先告一段落风纠。

  1. 調(diào)優(yōu)注意事項(xiàng)
  • 在應(yīng)用系統(tǒng)的設(shè)計(jì)開發(fā)過程中,應(yīng)始終把性能放在考慮的范圍內(nèi)牢贸,將性能測(cè)試常態(tài)化竹观,日常化的內(nèi)網(wǎng)的性能測(cè)試+定期的真實(shí)環(huán)境的業(yè)務(wù)性能測(cè)試潜索,PTS都可以支持臭增。
  • 確定清晰明確的性能目標(biāo)是關(guān)鍵,進(jìn)而將目標(biāo)轉(zhuǎn)化為PTS中的壓測(cè)場(chǎng)景并設(shè)置好需要的目標(biāo)量級(jí)竹习,然后視情況選擇并發(fā)誊抛、TPS模式,自動(dòng)遞增/手工調(diào)速的組合進(jìn)行流量控制整陌。
  • 必須保證調(diào)優(yōu)后的程序運(yùn)行正確拗窃。
  • 系統(tǒng)的性能更大程度上取決于良好的設(shè)計(jì)瞎领,調(diào)優(yōu)技巧只是一個(gè)輔助手段。
  • 調(diào)優(yōu)過程是迭代漸進(jìn)的過程随夸,每一次調(diào)優(yōu)的結(jié)果都要反饋到后續(xù)的代碼開發(fā)中去九默。
  • 性能調(diào)優(yōu)不能以犧牲代碼的可讀性和可維護(hù)性為代價(jià)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宾毒,一起剝皮案震驚了整個(gè)濱河市驼修,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诈铛,老刑警劉巖乙各,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異癌瘾,居然都是意外死亡觅丰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門妨退,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妇萄,“玉大人,你說我怎么就攤上這事咬荷」诰洌” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵幸乒,是天一觀的道長(zhǎng)懦底。 經(jīng)常有香客問我,道長(zhǎng)罕扎,這世上最難降的妖魔是什么聚唐? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮腔召,結(jié)果婚禮上杆查,老公的妹妹穿的比我還像新娘。我一直安慰自己臀蛛,他們只是感情好亲桦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浊仆,像睡著了一般客峭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抡柿,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天舔琅,我揣著相機(jī)與錄音,去河邊找鬼沙绝。 笑死搏明,一個(gè)胖子當(dāng)著我的面吹牛鼠锈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播星著,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼购笆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虚循!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起横缔,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茎刚,沒想到半個(gè)月后襟锐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粮坞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年初狰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莫杈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奢入,死狀恐怖筝闹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情关顷,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布解寝,位于F島的核電站艘儒,受9級(jí)特大地震影響夫偶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兵拢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望说铃。 院中可真熱鬧嘹履,春花似錦债热、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)配并。三九已至,卻和暖如春溉旋,著一層夾襖步出監(jiān)牢的瞬間嫉髓,已是汗流浹背观腊。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工恕沫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纱意。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像偷霉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子类少,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容