<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)化

          共 2765字,需瀏覽 6分鐘

           ·

          2020-08-11 04:19

          來源:https://www.cnblogs.com/wangjiming

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

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

          一、項(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)用

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

          1.當(dāng)秒殺的時(shí)候,cpu暴增

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

          圖1

          圖2

          ?圖3

          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)求截圖


          四、排查過程及分析

          (一)排查思路

          根據(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ù)等;

          (二)排查過程

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

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

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

          3.jdbc連接超時(shí)

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

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

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

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

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

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

          (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ò)展方式來實(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"

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

          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)

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

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

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

          5.代碼優(yōu)化

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

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

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

          conf/context.xml增大緩存
          ????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é)

          本篇文章從實(shí)戰(zhàn)角度,從問題識(shí)別,問題定位,問題分析,提出解決方案,實(shí)施解決方案,監(jiān)控調(diào)優(yōu)后的解決方案和調(diào)優(yōu)后的觀察等角度來與大家一起交流分享本次線上高并發(fā)調(diào)優(yōu)整個(gè)閉環(huán)過程,當(dāng)然,由于篇幅的限制,有些細(xì)節(jié)和優(yōu)化手段未在本篇文章中提及;雖然解決了該問題,但是從長(zhǎng)遠(yuǎn)來看,該單體項(xiàng)目任然存在很大的問題和隱患,下面隨便舉幾個(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 -

          精彩文章推薦:

          從網(wǎng)管到架構(gòu)師再到微創(chuàng)業(yè),我這9年的成長(zhǎng)感悟

          12年老司機(jī)總結(jié)的 5 條面試忠告,終身受用

          一根網(wǎng)線發(fā)起的攻擊

          一篇漫畫帶你了解 Linux 內(nèi)核長(zhǎng)啥樣!

          10 個(gè)Linux Awk文本處理經(jīng)典案例

          Linux 系統(tǒng)故障排查,看這一篇就夠了

          10 分鐘部署一個(gè) Kubernetes 集群

          部署一套完整的Kubernetes高可用集群(二進(jìn)制)




          點(diǎn)亮,服務(wù)器三年不宕機(jī)

          瀏覽 59
          點(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>
                  手机在线看成人片 | 日韩黄色在线电影 | 欧美在线91 | 在线免费看黄色 | 天堂网在线播放 |