剛來的架構(gòu)師,憑借一次商城線上優(yōu)化實操棍辕,眾人爭著唱“征服””

對于線上系統(tǒng)調(diào)優(yōu)暮现,它本身是個技術(shù)活,不僅需要很強的技術(shù)實戰(zhàn)能力楚昭,很強的問題定位栖袋,問題識別,問題排查能力抚太,還需要很豐富的調(diào)優(yōu)能力塘幅。

? ? 本篇文章從實戰(zhàn)角度昔案,從問題識別,問題定位电媳,問題分析踏揣,提出解決方案,實施解決方案匾乓,監(jiān)控調(diào)優(yōu)后的解決方案和調(diào)優(yōu)后的觀察等角度來與大家一起交流分享本次線上高并發(fā)調(diào)優(yōu)整個閉環(huán)過程呼伸。

一? 項目簡要情況概述

? ? 該項目為基于SSM架構(gòu)的商城類單體架構(gòu)項目,其中有一個秒殺重磅模塊钝尸,如下為當前線上環(huán)境的簡要架構(gòu)部署圖括享,大致描述一下:

? ? (1)項目為SSM架構(gòu)

? ? (2)服務(wù)器類別:1臺負載均衡服務(wù)器(F5),3臺運用程序服務(wù)器,1臺計時器服務(wù)器,1臺redis服務(wù)器珍促,1臺圖片服服務(wù)器和1臺基于Pass架構(gòu)的Mysql主從服務(wù)器(微軟云)

? ? (3)調(diào)用邏輯:下圖為簡要調(diào)用邏輯


?二? 何為單體架構(gòu)項目

從架構(gòu)發(fā)展角度铃辖,軟件項目經(jīng)歷了如下階段的發(fā)展:

1.單體架構(gòu):可理解為傳統(tǒng)的前后端未分離的架構(gòu)

2.垂直架構(gòu):可理解為前后端分離架構(gòu)

3.SOA架構(gòu):可理解為按服務(wù)類別,業(yè)務(wù)流量猪叙,服務(wù)間依賴關(guān)系等服務(wù)化的架構(gòu)娇斩,如以前的單體架構(gòu)ERP項目,劃分為訂單服務(wù)穴翩,采購服務(wù)犬第,物料服務(wù)和銷售服務(wù)等

4 微服務(wù):可理解為一個個小型的項目,如之前的ERP大型項目芒帕,劃分為訂單服務(wù)(訂單項目)歉嗓,采購服務(wù)(采購項目),物料服務(wù)(物料項目)和銷售服務(wù)(銷售項目)背蟆,以及服務(wù)之間調(diào)用

?三? 本SSM項目引發(fā)的線上問題

問題一:當秒殺的時候鉴分,cpu暴增。

該系統(tǒng)每天秒殺分為三個時間端:10點带膀,13點和20點志珍,如下為秒殺的簡要頁面

?圖1

圖2

?圖3

?2.單臺運用服務(wù)器cpu?

?3.單臺運用服務(wù)器請求數(shù)

?4.rdis連接數(shù)(info clients)

這個未保存截圖,記得是600左右

connected_clients:600?

5.mysql請求截圖

四? 排查過程及分析

(一)排查思路垛叨。

根據(jù)服務(wù)部署和項目架構(gòu)伦糯,從如下幾個方面排查:

(1)運用服務(wù)器:排查內(nèi)存,cpu,請求數(shù)等嗽元;

(2)文件圖片服務(wù)器:排查內(nèi)存敛纲,cpu,請求數(shù)等;

(3)計時器服務(wù)器:排查內(nèi)存还棱,cpu,請求數(shù)等载慈;

(4)redis服務(wù)器:排查內(nèi)存,cpu,連接數(shù)等珍手;

(5)db服務(wù)器:排查內(nèi)存办铡,cpu,連接數(shù)等得湘;

(二)排查過程

在秒殺后30分鐘內(nèi)尖阔,

1.運用程序服務(wù)器cpu暴增闯冷,內(nèi)存暴增铐维,造成cpu和內(nèi)存暴增的根本原因是請求數(shù)過高,單臺運用服務(wù)器達到3000多童叠;

2.redis請求超時

3.jdbc連接超時

?4.通過gc查看框喳,發(fā)現(xiàn)24小時內(nèi),F(xiàn)ullGC發(fā)生了152次

?5.再看看堆棧厦坛,發(fā)現(xiàn)有一些線程阻塞和死鎖

jstat -l pid五垮,也可以通過VisualVM分析

?6.發(fā)現(xiàn)有2000多個線程請求無效資源

(三)造成本次系統(tǒng)異常主要因素分析

(1)在秒殺時,請求量過高杜秸,導(dǎo)致運用服務(wù)器負載過高放仗;

(2)redis連接池滿,獲取不到連接撬碟,connot get a connection from thread pool

(3)jdbc連接池滿诞挨,獲取不到連接和超時

(4)存在大對象代碼,如向list集合中不停添加對象呢蛤,不能及時回收對象導(dǎo)致內(nèi)存增加惶傻,頻繁發(fā)生Full GC

(5)tomcat并發(fā)參數(shù),jvm優(yōu)化參數(shù)其障,jedis配置參數(shù)银室,jdbc配置參數(shù)不合理

(6)未對請求量進行削峰和限流

(7)資源連接未及時釋放,如redis連接静秆,jdbc連接未及時釋放

?五? 最終解決方案

1.增加運用服務(wù)粮揉,做流量削峰和分流

由于該項目未增加MQ,因此只能采用硬負載抚笔,增加服務(wù)器水平擴展方式來實現(xiàn)流量削峰和流量分流


?2.優(yōu)化jvm參數(shù),如下為本次優(yōu)化后的參數(shù)

JAVA_OPTS="-server -Xmx9g -Xms9g -Xmn3g -Xss500k -XX:+DisableExplicitGC -XX:MetaspaceSize=2048m -XX:MaxMetaspaceSize=2048m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"

關(guān)于這個jvm參數(shù)的優(yōu)化侨拦,jvm理論是怎樣的殊橙,官方建議是怎樣的,實戰(zhàn)是怎樣的狱从,將在下篇文章中分析膨蛮。

3.優(yōu)化tomcat并發(fā)相關(guān)參數(shù)

主要是兩方面:

(1)修改bio協(xié)議為nio2? (2)根據(jù)服務(wù)器配置,業(yè)務(wù)場景季研,業(yè)務(wù)流量等合理設(shè)置相關(guān)參數(shù)敞葛,盡量達到最優(yōu)

關(guān)于tomcat相關(guān)參數(shù)優(yōu)化,在接下來的文章中分析与涡。

4.redis 和jdbc參數(shù)優(yōu)化

由于涉及到安全性問題惹谐,這里不列出

5.代碼優(yōu)化

(1)優(yōu)化掉大對象

(2)優(yōu)化未及時釋放的對象和連接資源

6.解決000多個線程請求無效資源問題

在conf/context.xml增大緩存

<Resource?

? ? cachingAllowed = "true"

? ? cacheMaxSize = "102400"

/>

六 最終優(yōu)化結(jié)果

經(jīng)過幾天觀察持偏,系統(tǒng)平穩(wěn)

1.基本監(jiān)控

2.GC

3.抽樣器cou和內(nèi)存

cpu


?內(nèi)存

七? 總結(jié)

1.本篇文章從實戰(zhàn)角度,從問題識別氨肌,問題定位鸿秆,問題分析,提出解決方案怎囚,實施解決方案卿叽,監(jiān)控調(diào)優(yōu)后的解決方案和調(diào)優(yōu)后的觀察等角度來與大家一起交流分享本次線上高并發(fā)調(diào)優(yōu)整個閉環(huán)過程,當然恳守,由于篇幅的限制考婴,

有些細節(jié)和優(yōu)化手段未在本篇文章中提及;

2.雖然解決了該問題催烘,但是從長遠來看沥阱,該單體項目任然存在很大的問題和隱患,下面隨便舉幾個:

(1)前后端緊耦合颗圣,未分離

(2)由于該系統(tǒng)秒殺業(yè)務(wù)屬于非持續(xù)性并發(fā)喳钟,即局部性并發(fā),當前并未做局部并發(fā)架構(gòu)的調(diào)整

(3)由于該系統(tǒng)秒殺業(yè)務(wù)與該項目緊緊耦合在一起在岂,未進行隔離奔则,未獨立成單獨模塊,未單獨部署蔽午,從而存在因秒殺業(yè)務(wù)造成整個系統(tǒng)癱瘓的風(fēng)險易茬;

(4)未做流量削峰和流量限流,如加mq等軟手段及老;

(5)redis未做高可用集群

自:https://www.cnblogs.com/wangjiming/p/13225544.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抽莱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骄恶,更是在濱河造成了極大的恐慌食铐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僧鲁,死亡現(xiàn)場離奇詭異虐呻,居然都是意外死亡,警方通過查閱死者的電腦和手機寞秃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門斟叼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人春寿,你說我怎么就攤上這事朗涩。” “怎么了绑改?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵谢床,是天一觀的道長兄一。 經(jīng)常有香客問我,道長萤悴,這世上最難降的妖魔是什么瘾腰? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮覆履,結(jié)果婚禮上蹋盆,老公的妹妹穿的比我還像新娘。我一直安慰自己硝全,他們只是感情好栖雾,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伟众,像睡著了一般析藕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凳厢,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天账胧,我揣著相機與錄音,去河邊找鬼先紫。 笑死治泥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的遮精。 我是一名探鬼主播居夹,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼本冲!你這毒婦竟也來了准脂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤檬洞,失蹤者是張志新(化名)和其女友劉穎狸膏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體添怔,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡环戈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了澎灸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡遮晚,死狀恐怖性昭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情县遣,我是刑警寧澤糜颠,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布汹族,位于F島的核電站,受9級特大地震影響其兴,放射性物質(zhì)發(fā)生泄漏顶瞒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一元旬、第九天 我趴在偏房一處隱蔽的房頂上張望榴徐。 院中可真熱鬧,春花似錦匀归、人聲如沸坑资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袱贮。三九已至,卻和暖如春体啰,著一層夾襖步出監(jiān)牢的瞬間攒巍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工荒勇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柒莉,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓枕屉,卻偏偏與公主長得像常柄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搀擂,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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

  • 夜鶯2517閱讀 127,712評論 1 9
  • 版本:ios 1.2.1 亮點: 1.app角標可以實時更新天氣溫度或選擇空氣質(zhì)量西潘,建議處女座就不要選了,不然老想...
    我就是沉沉閱讀 6,878評論 1 6
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月哨颂,有人笑有人哭喷市,有人歡樂有人憂愁,有人驚喜有人失落威恼,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,521評論 28 53
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,585評論 2 9