<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一次線上商城系統(tǒng)高并發(fā)優(yōu)化,漲姿勢(shì)了~

          共 2871字,需瀏覽 6分鐘

           ·

          2021-02-15 13:08


          作者:Alan_beijing?

          來(lái)源:cnblogs.com/wangjiming/p/13225544.html


          對(duì)于線上系統(tǒng)調(diào)優(yōu),它本身是個(gè)技術(shù)活,不僅需要很強(qiáng)的技術(shù)實(shí)戰(zhàn)能力,很強(qiáng)的問(wèn)題定位,問(wèn)題識(shí)別,問(wèn)題排查能力,還需要很豐富的調(diào)優(yōu)能力。

          本篇文章從實(shí)戰(zhàn)角度,從問(wèn)題識(shí)別,問(wèn)題定位,問(wèn)題分析,提出解決方案,實(shí)施解決方案,監(jiān)控調(diào)優(yōu)后的解決方案和調(diào)優(yōu)后的觀察等角度來(lái)與大家一起交流分享本次線上高并發(fā)調(diào)優(yōu)整個(gè)閉環(huán)過(guò)程。

          一 項(xiàng)目簡(jiǎn)要情況概述

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

          (1)項(xiàng)目為SSM架構(gòu)

          (2)服務(wù)器類別:1臺(tái)負(fù)載均衡服務(wù)器(F5),3臺(tái)運(yùn)用程序服務(wù)器,1臺(tái)計(jì)時(shí)器服務(wù)器,1臺(tái)redis服務(wù)器,1臺(tái)圖片服服務(wù)器和1臺(tái)基于Pass架構(gòu)的Mysql主從服務(wù)器(微軟云)

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

          圖片

          二 何為單體架構(gòu)項(xiàng)目

          從架構(gòu)發(fā)展角度,軟件項(xiàng)目經(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項(xiàng)目,劃分為訂單服務(wù),采購(gòu)服務(wù),物料服務(wù)和銷售服務(wù)等

          4 微服務(wù):可理解為一個(gè)個(gè)小型的項(xiàng)目,如之前的ERP大型項(xiàng)目,劃分為訂單服務(wù)(訂單項(xiàng)目),采購(gòu)服務(wù)(采購(gòu)項(xiàng)目),物料服務(wù)(物料項(xiàng)目)和銷售服務(wù)(銷售項(xiàng)目),以及服務(wù)之間調(diào)用

          img

          三 本SSM項(xiàng)目引發(fā)的線上問(wèn)題

          問(wèn)題一:當(dāng)秒殺的時(shí)候,cpu暴增。

          該系統(tǒng)每天秒殺分為三個(gè)時(shí)間端:10點(diǎn),13點(diǎn)和20點(diǎn),如下為秒殺的簡(jiǎn)要頁(yè)面

          img

          2.單臺(tái)運(yùn)用服務(wù)器cpu

          圖片

          3.單臺(tái)運(yùn)用服務(wù)器請(qǐng)求數(shù)

          圖片

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

          這個(gè)未保存截圖,記得是600左右

          connected_clients:600

          5.mysql請(qǐng)求截圖

          圖片

          四 排查過(guò)程及分析

          (一)排查思路。

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

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

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

          (3)計(jì)時(shí)器服務(wù)器:排查內(nèi)存,cpu,請(qǐng)求數(shù)等;

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

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

          (二)排查過(guò)程

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

          1.運(yùn)用程序服務(wù)器cpu暴增,內(nèi)存暴增,造成cpu和內(nèi)存暴增的根本原因是請(qǐng)求數(shù)過(guò)高,單臺(tái)運(yùn)用服務(wù)器達(dá)到3000多;

          img

          2.redis請(qǐng)求超時(shí)

          img

          3.jdbc連接超時(shí)

          img

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

          img

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

          jstat -l pid,也可以通過(guò)VisualVM分析

          img

          6.發(fā)現(xiàn)有2000多個(gè)線程請(qǐng)求無(wú)效資源

          img

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

          (1)在秒殺時(shí),請(qǐng)求量過(guò)高,導(dǎo)致運(yùn)用服務(wù)器負(fù)載過(guò)高;

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

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

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

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

          (6)未對(duì)請(qǐng)求量進(jìn)行削峰和限流

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

          五 最終解決方案

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

          由于該項(xiàng)目未增加MQ,因此只能采用硬負(fù)載,增加服務(wù)器水平擴(kuò)展方式來(lái)實(shí)現(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"

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

          主要是兩方面:

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

          img

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

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

          由于涉及到安全性問(wèn)題,這里不列出

          5.代碼優(yōu)化

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

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

          6.解決000多個(gè)線程請(qǐng)求無(wú)效資源問(wèn)題

          在conf/context.xml增大緩存


          cachingAllowed?=?"true"

          cacheMaxSize?=?"102400"

          />

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

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

          1.基本監(jiān)控

          圖片

          2.GC

          圖片

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

          cpu

          圖片

          內(nèi)存

          img

          七 總結(jié)

          1.本篇文章從實(shí)戰(zhàn)角度,從問(wèn)題識(shí)別,問(wèn)題定位,問(wèn)題分析,提出解決方案,實(shí)施解決方案,監(jiān)控調(diào)優(yōu)后的解決方案和調(diào)優(yōu)后的觀察等角度來(lái)與大家一起交流分享本次線上高并發(fā)調(diào)優(yōu)整個(gè)閉環(huán)過(guò)程,當(dāng)然,由于篇幅的限制,

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

          2.雖然解決了該問(wèn)題,但是從長(zhǎng)遠(yuǎn)來(lái)看,該單體項(xiàng)目任然存在很大的問(wèn)題和隱患,下面隨便舉幾個(gè):

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

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

          (3)由于該系統(tǒng)秒殺業(yè)務(wù)與該項(xiàng)目緊緊耦合在一起,未進(jìn)行隔離,未獨(dú)立成單獨(dú)模塊,未單獨(dú)部署,從而存在因秒殺業(yè)務(wù)造成整個(gè)系統(tǒng)癱瘓的風(fēng)險(xiǎn);

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

          (5)redis未做高可用集群

          END


          有熱門(mén)推薦??

          1.?MySQL與PostgreSQL比較,哪個(gè)更好、我們?cè)撨x用哪個(gè)?

          2.?Hutool Java 工具類庫(kù)導(dǎo)出 Excel,超級(jí)簡(jiǎn)單!

          3.?萬(wàn)字詳解!Git 入門(mén)最佳實(shí)踐 !

          4.?Linux內(nèi)存、Swap、Cache、Buffer詳細(xì)解析

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本天天干天天爱 | 精品国内久 | 色婷婷亚洲在线 | 久久婷婷综合国产色视频 | 超碰在线观看97 |