掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
對于線上系統(tǒng)調(diào)優(yōu),它本身是個技術(shù)活,不僅需要很強的技術(shù)實戰(zhàn)能力,很強的問題定位,問題識別,問題排查能力,還需要很豐富的調(diào)優(yōu)能力。

圖片來自 Pexels
本篇文章站在實戰(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)部署圖。
大致描述一下:
何為單體架構(gòu)項目
從架構(gòu)發(fā)展角度,軟件項目經(jīng)歷了如下階段的發(fā)展:
本 SSM 項目引發(fā)的線上問題
①當秒殺的時候,CPU 暴增
該系統(tǒng)每天秒殺分為三個時間端:10 點,13 點和 20 點,如下為秒殺的簡要頁面:
②單臺運用服務(wù)器 CPU
③單臺運用服務(wù)器請求數(shù)
④rdis 連接數(shù)(info clients)
這個未保存截圖,記得是 600 左右:
- connected_clients:600
⑤MySQL 請求截圖
排查過程及分析
排查思路
根據(jù)服務(wù)部署和項目架構(gòu),從如下幾個方面排查:
排查過程
在秒殺后 30 分鐘內(nèi):
①運用程序服務(wù)器 CPU 暴增,內(nèi)存暴增,造成 CPU 和內(nèi)存暴增的根本原因是請求數(shù)過高,單臺運用服務(wù)器達到 3000 多。
②Redis 請求超時,如下圖:
③JDBC 連接超時,如下圖:
④通過 GC 查看,發(fā)現(xiàn) 24 小時內(nèi),F(xiàn)ullGC 發(fā)生了 152 次,如下圖:
⑤再看看堆棧,發(fā)現(xiàn)有一些線程阻塞和死鎖。
jstat -l pid,也可以通過 VisualVM 分析:
⑥發(fā)現(xiàn)有 2000 多個線程請求無效資源,如下圖:
造成本次系統(tǒng)異常主要因素分析
造成本次系統(tǒng)異常主要因素分析如下:
最終解決方案
①增加運用服務(wù),做流量削峰和分流
由于該項目未增加 MQ,因此只能采用硬負載,增加服務(wù)器水平擴展方式來實現(xiàn)流量削峰和流量分流:
②優(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)是怎樣的,將在下篇文章中分析。
③優(yōu)化 Tomcat 并發(fā)相關(guān)參數(shù)
主要是兩方面:
關(guān)于 Tomcat 相關(guān)參數(shù)優(yōu)化,在接下來的文章中分析。
④Redis 和 JDBC 參數(shù)優(yōu)化
由于涉及到安全性問題,這里不列出。
⑤代碼優(yōu)化
代碼優(yōu)化如下:
⑥解決 000 多個線程請求無效資源問題:
- 在conf/context.xml增大緩存
- cachingAllowed = "true"
- cacheMaxSize = "102400"
- />
最終優(yōu)化結(jié)果
經(jīng)過幾天觀察,系統(tǒng)平穩(wěn)。
基本監(jiān)控,如下圖:
GC,如下圖:
抽樣器 CPU 和內(nèi)存:
總結(jié)
由于篇幅的限制有些細節(jié)和優(yōu)化手段未在本篇文章中提及。雖然解決了該問題,但是從長遠來看,該單體項目任然存在很大的問題和隱患。
下面隨便舉幾個:
前后端緊耦合,未分離。
作者:Alan_beijing
編輯:陶家龍
出處:http://www.cnblogs.com/wangjiming/

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流