背景:公司app進(jìn)行推廣需要先對接口進(jìn)行壓測,找出瓶頸,進(jìn)行優(yōu)化。
工具:騰訊云壓測大師,三臺服務(wù)器服務(wù)器、MySQL、mongodb、redis都是鏡像生產(chǎn)環(huán)境。
操作步驟:
1.?將生產(chǎn)環(huán)境環(huán)境代碼部署在壓測環(huán)境
2.?修改配置文件中MySQL、mongodb、redis連接(賬號、密碼修改為壓測環(huán)境)
3.?創(chuàng)建壓測中需要用到的賬號(需要用到usertoken),先將數(shù)據(jù)導(dǎo)入到mongodb和redis,保證在接口運(yùn)行時(shí)能找到此用戶
4.?在騰訊云-壓測大師中創(chuàng)建用例:接口從50壓至200,按照50間隔上增,持續(xù)并發(fā)5分鐘
5.?設(shè)置服務(wù)器監(jiān)控和檢測點(diǎn)(監(jiān)控三臺服務(wù)、檢測點(diǎn)為返回code=200)
6.?執(zhí)行接口壓測用例
如圖:



結(jié)果:
1.?在壓測過程中發(fā)現(xiàn)TPS只有兩百左右,平均響應(yīng)時(shí)間都在三百ms以上,但是服務(wù)器的性能從監(jiān)控上來看無問題,嘗試修改方案:修改tomcat最大連接數(shù),修改mongodb、mysql的最大連接數(shù)。
? ? ? ? a.?進(jìn)入tomcat配置文件中,修改參數(shù),參考文檔https://www.cnblogs.com/laojiao/p/9575383.html:
? ??????


2.?壓測過程中還出現(xiàn)連接超時(shí)現(xiàn)象,嘗試修改方案:修改連接超時(shí)最大時(shí)間。

3.?嘗試以上修改之后重新壓測發(fā)現(xiàn)TPS和平均響應(yīng)時(shí)間并未發(fā)生太大改變,然后就問了有經(jīng)驗(yàn)的測試大佬(當(dāng)然是以前帶我的morty同學(xué)),叫我把GC日志打開查看一下GC日志是或正常,然后就開啟GC日志,參考文檔http://www.itdecent.cn/p/d1f5916d5548(morty同學(xué)提供的,哈哈):

4.?開啟GC日志進(jìn)行壓測之后,發(fā)現(xiàn)都是Allocation Failure,沒有看到full gc,找開發(fā)看也沒看出個(gè)所以然,好絕望!
5.?查看后臺日志,發(fā)現(xiàn)一個(gè)請求發(fā)出到收到想要的時(shí)間都在一百ms左右,也不長,為什么在壓測大師上就變成了三百多ms,懷疑是模擬客戶端發(fā)送請求和接收請求時(shí)耗時(shí)太長,嘗試解決方法,利用jmeter在內(nèi)網(wǎng)壓測,不過壓測結(jié)果還是不理想,響應(yīng)時(shí)間還是沒降低,而且并發(fā)數(shù)在100的時(shí)候user服務(wù)出現(xiàn)無響應(yīng)情況
6.?在網(wǎng)上找了平均響應(yīng)時(shí)間長的決解方法,修改jvm和tomcat配置文件還是有問題,有些接口在并發(fā)100的時(shí)候user服務(wù)無響應(yīng),但是進(jìn)程還存在
7.?找運(yùn)維,運(yùn)維同學(xué)說在壓測的時(shí)候無響應(yīng)時(shí)將堆棧信息打印出來,嘗試方法:繼續(xù)壓測當(dāng)服務(wù)無響應(yīng)時(shí)打印出堆棧信息:


8.?將打印出來的信息給開發(fā),發(fā)現(xiàn)請求在查詢r(jià)edis用戶信息時(shí)一直在等待中,查看redis的最大連接數(shù)只有50,但是設(shè)置的不止這個(gè)數(shù),開發(fā)就查看代碼,發(fā)現(xiàn)代碼里面沒有去讀取配置文件里面的連接數(shù)而只是默認(rèn)給了一個(gè)值為5,導(dǎo)致連接數(shù)太小一直等待,出現(xiàn)超時(shí)、平均想要時(shí)間過長現(xiàn)象。
9.?修改代碼重新壓測,有兩臺服務(wù)器出現(xiàn):

10.?網(wǎng)上查閱資料,等待的釋放時(shí)間太長,調(diào)用端口釋放之后需要等待30s,解決方案(按照網(wǎng)上方法):

10.?經(jīng)過以上修改,再次進(jìn)行壓測,并發(fā)數(shù)為200時(shí),TPS達(dá)到兩千多,平均響應(yīng)時(shí)間為80ms左右,基本已達(dá)標(biāo)
11.?增加并發(fā)數(shù),找到瓶頸,本次壓測經(jīng)過不曉得多少天(中間經(jīng)過兩次發(fā)版耽擱了一些時(shí)間),總算是完成。
感謝本次壓測過程中幫助的朋友!