自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

牛掰!一次線上商城系統(tǒng)高并發(fā)優(yōu)化實(shí)戰(zhàn)!

開(kāi)發(fā) 架構(gòu) 開(kāi)發(fā)工具
對(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)能力。

 對(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)能力。

[[339623]]

 

圖片來(lái)自 Pexels

本篇文章站在實(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)部署圖。

 

大致描述一下:

  • 項(xiàng)目為 SSM 架構(gòu)。
  • 服務(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ù)器(微軟云)。
  • 調(diào)用邏輯:上圖為簡(jiǎn)要調(diào)用邏輯。

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

 

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

  • 單體架構(gòu):可理解為傳統(tǒng)的前后端未分離的架構(gòu)。
  • 垂直架構(gòu):可理解為前后端分離架構(gòu)。
  • SOA 架構(gòu):可理解為按服務(wù)類別,業(yè)務(wù)流量,服務(wù)間依賴關(guān)系等服務(wù)化的架構(gòu),如以前的單體架構(gòu) ERP 項(xiàng)目,劃分為訂單服務(wù),采購(gòu)服務(wù),物料服務(wù)和銷售服務(wù)等。
  • 微服務(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ā)的線上問(wèn)題

①當(dāng)秒殺的時(shí)候,CPU 暴增

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

 

②單臺(tái)運(yùn)用服務(wù)器 CPU

 

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

 

④rdis 連接數(shù)(info clients)

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

  1. connected_clients:600  

⑤MySQL 請(qǐng)求截圖

 

排查過(guò)程及分析

排查思路

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

  • 運(yùn)用服務(wù)器:排查內(nèi)存,CPU,請(qǐng)求數(shù)等。
  • 文件圖片服務(wù)器:排查內(nèi)存,CPU,請(qǐng)求數(shù)等。
  • 計(jì)時(shí)器服務(wù)器:排查內(nèi)存,CPU,請(qǐng)求數(shù)等。
  • Redis 服務(wù)器:排查內(nèi)存,CPU,連接數(shù)等。
  • DB 服務(wù)器:排查內(nèi)存,CPU,連接數(shù)等。

排查過(guò)程

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

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

②Redis 請(qǐng)求超時(shí),如下圖:

 

③JDBC 連接超時(shí),如下圖:

 

④通過(guò) GC 查看,發(fā)現(xiàn) 24 小時(shí)內(nèi),F(xiàn)ullGC 發(fā)生了 152 次,如下圖:

 

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

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

 

⑥發(fā)現(xiàn)有 2000 多個(gè)線程請(qǐng)求無(wú)效資源,如下圖:

 

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

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

  • 在秒殺時(shí),請(qǐng)求量過(guò)高,導(dǎo)致運(yùn)用服務(wù)器負(fù)載過(guò)高。
  • Redis 連接池滿,獲取不到連接,connot get a connection from thread pool。
  • JDBC 連接池滿,獲取不到連接和超時(shí)。
  • 存在大對(duì)象代碼,如向 List 集合中不停添加對(duì)象,不能及時(shí)回收對(duì)象導(dǎo)致內(nèi)存增加,頻繁發(fā)生 Full GC。
  • Tomcat 并發(fā)參數(shù),JVM 優(yōu)化參數(shù),Jedis 配置參數(shù),JDBC 配置參數(shù)不合理。
  • 未對(duì)請(qǐng)求量進(jìn)行削峰和限流。
  • 資源連接未及時(shí)釋放,如 Redis 連接,JDBC 連接未及時(shí)釋放。

最終解決方案

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

由于該項(xiàng)目未增加 MQ,因此只能采用硬負(fù)載,增加服務(wù)器水平擴(kuò)展方式來(lái)實(shí)現(xiàn)流量削峰和流量分流:

 

②優(yōu)化 JVM 參數(shù),如下為本次優(yōu)化后的參數(shù):

  1. 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)是怎樣的,將在下篇文章中分析。

③優(yōu)化 Tomcat 并發(fā)相關(guān)參數(shù)

主要是兩方面:

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

 

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

④Redis 和 JDBC 參數(shù)優(yōu)化

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

⑤代碼優(yōu)化

代碼優(yōu)化如下:

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

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

 

  1. 在conf/context.xml增大緩存 
  2. <Resource 
  3.     cachingAllowed = "true" 
  4.     cacheMaxSize = "102400" 
  5. /> 

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

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

基本監(jiān)控,如下圖:

 

 

GC,如下圖:

 

抽樣器 CPU 和內(nèi)存:

 

 

 

總結(jié)

由于篇幅的限制有些細(xì)節(jié)和優(yōu)化手段未在本篇文章中提及。雖然解決了該問(wèn)題,但是從長(zhǎng)遠(yuǎn)來(lái)看,該單體項(xiàng)目任然存在很大的問(wèn)題和隱患。

下面隨便舉幾個(gè):

前后端緊耦合,未分離。

  • 由于該系統(tǒng)秒殺業(yè)務(wù)屬于非持續(xù)性并發(fā),即局部性并發(fā),當(dāng)前并未做局部并發(fā)架構(gòu)的調(diào)整。
  • 由于該系統(tǒng)秒殺業(yè)務(wù)與該項(xiàng)目緊緊耦合在一起,未進(jìn)行隔離,未獨(dú)立成單獨(dú)模塊,未單獨(dú)部署,從而存在因秒殺業(yè)務(wù)造成整個(gè)系統(tǒng)癱瘓的風(fēng)險(xiǎn)。
  • 未做流量削峰和流量限流,如加 MQ 等軟手段。
  • Redis 為做高可用集群。

作者:Alan_beijing

編輯:陶家龍

出處:http://www.cnblogs.com/wangjiming/

責(zé)任編輯:武曉燕 來(lái)源: 博客園
相關(guān)推薦

2022-09-07 09:09:13

高并發(fā)架構(gòu)

2020-10-27 10:35:38

優(yōu)化代碼項(xiàng)目

2021-08-02 13:08:56

高并發(fā)服務(wù)

2021-11-11 16:14:04

Kubernetes

2020-12-29 10:25:07

漏洞JSONP注入

2016-11-28 15:52:09

微信小程序開(kāi)發(fā)

2023-01-04 18:32:31

線上服務(wù)代碼

2020-10-30 14:11:38

服務(wù)器SDK堆棧

2015-07-17 10:04:33

MKMapView優(yōu)化

2023-12-11 06:27:39

MySQL線上業(yè)務(wù)優(yōu)化后臺(tái)上傳文件

2021-11-23 21:21:07

線上排查服務(wù)

2022-11-13 17:48:33

JavaSQL

2020-11-16 07:19:17

線上函數(shù)性能

2020-11-16 12:35:25

線程池Java代碼

2022-06-06 11:31:31

MySQL數(shù)據(jù)查詢

2022-07-11 13:58:14

數(shù)據(jù)庫(kù)業(yè)務(wù)流程系統(tǒng)

2023-01-16 14:49:00

MongoDB數(shù)據(jù)庫(kù)

2021-12-12 18:12:13

Hbase線上問(wèn)題

2021-01-08 13:52:15

Consul微服務(wù)服務(wù)注冊(cè)中心
點(diǎn)贊
收藏

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