轉(zhuǎn)轉(zhuǎn)基礎(chǔ)服務(wù)性能壓測實戰(zhàn)
作者|楊立志
壓測背景
為了業(yè)務(wù)穩(wěn)定性、系統(tǒng)穩(wěn)定性、業(yè)務(wù)大促目標提供基礎(chǔ)保障。
1、壓測服務(wù)
(1)確定壓測服務(wù):
通過服務(wù)管理平臺監(jiān)控數(shù)據(jù)獲得,核心服務(wù)核心接口流量較高的top10接口。
(2)確定壓測接口
服務(wù)管理平臺中監(jiān)控獲得歷史大促時的QPS高峰數(shù)據(jù),響應(yīng)時間ms級別。
緩存命中率RD給出大部分都是90%以上甚至99%。
由于增加了新業(yè)務(wù),以及服務(wù)有一些優(yōu)化。大促預(yù)估單接口QPS在歷史壓測基礎(chǔ)上增加30%量。
說明:QPS目標值必須大于等于歷史壓測結(jié)果。可以根據(jù)歷史大促增長量以及新業(yè)務(wù)的拓展進行評估。
舉例:假如接口getProductBussinessById ,目標QPS15600,緩存命中率92%

2、壓測工具
jmeter 壓測平臺:是基于jmeter工具二次開發(fā)的壓測平臺。目前僅支持http協(xié)議。RPC接口可以通過腳本調(diào)用方式實現(xiàn)。
3、壓測時間
為防止影響線上用戶,壓測定于凌晨之后進行。
4、壓測場景
(1)壓測時長 每次并發(fā) 5分鐘。
(2)數(shù)據(jù)參數(shù)化,根據(jù)緩存命中率 部分數(shù)據(jù)走緩存,部分數(shù)據(jù)直接走數(shù)據(jù)庫
(3)單接口壓測。摸底接口是否達到目標并發(fā)量,混合場景不在本次壓測范圍。
壓測腳本設(shè)計
由于是scf協(xié)議,不能用jmeter壓測http方式進行壓測。所以本次采用腳本方式調(diào)用接口,然后通過jmeter加載腳本來進行測試。
參數(shù)化數(shù)據(jù)分兩個文件,一個是緩存中已經(jīng)存在的數(shù)據(jù),一個是緩存中不存在的數(shù)據(jù)。
另外說明一下:讀取文件不易過大,會降低性能。
緩存文件:原來4MB分割為 2000個小文件。下圖為部分截圖
非緩存文件同理。

1、壓測腳本實例
getProductBussinessById 接口腳本實例,其他接口同理。setupTest方法中是初始化數(shù)據(jù),半部分代碼截圖

下面是jmeter執(zhí)行的并發(fā)方法。通過隨機數(shù)百分比占比來確定是否使用緩存數(shù)據(jù),還是非緩存數(shù)據(jù)。
由于命中率92%,所以隨機數(shù)小于92的走緩存,大于92的數(shù)據(jù)走非緩存。
下圖沒有加斷言,壓測結(jié)束后會通過命令行分析返回結(jié)果日志。

2、jmeter配置
說明:jmeter上傳下面各種配置比較復(fù)雜。壓測平臺后續(xù)版本會優(yōu)化此處,方便快捷操作。
(1)上傳lib0
lib0是你本機eclipse或者ideal 生成的腳本依賴的jar包以及用例jar包
ideal為例子:腳本寫好后, 第一、點擊clean ,第二點擊package

服務(wù)器進入 lib下,命令: cd /opt/soft/apache-jmeter/lib
#上傳lib0 命令:rz -bey
解壓道lib文件夾下 此時生成了lib0文件夾 命令:unzip lib0.zip

(2)上傳本地用例jar包
進入 /opt/soft/apache-jmeter/lib/ext 命令:cd /opt/soft/apache-jmeter/lib/ext
上傳用例jar包 命令:rz -bey
選擇工程生成的jarD:\mycode\zhuanzhuan_performance_zzsearch\target\jar\zhuanzhuan_performance_zzsearch-0.0.1-SNAPSHOT.jar

(3)上傳scf.conf 以及參數(shù)化文件
上傳配置scf.conf文件以及 參數(shù)化文件(若有參數(shù)化文件,路徑自己定義的路徑。一般我都放在/opt/soft/apache-jmeter/data)
cd /opt/soft/apache-jmeter
mkdir data
cd data
rz -bey #上傳scf.conf 以及參數(shù)化數(shù)據(jù)文件 (代碼寫死的配置在哪路徑 就放在哪里路徑 我這只是個例子)

注意:
scf.conf存放路徑跟代碼中要一致
比如代碼中scf.conf配置路徑是 /opt/soft/apache-jmeter/data/scf.config 那么 就上傳到服務(wù)器該配置的目錄下

參數(shù)化所需要數(shù)據(jù) 同理
(4)修改jmeter結(jié)果日志文件路徑
cd /opt/soft/apache-jmeter/bin
vi jmeter-server
${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j /opt/soft/apache-jmeter/jmeter-server.log "$@"
3、執(zhí)行壓測
執(zhí)行壓測不多說,每次并發(fā)5分鐘。
需要注意的點是確定壓測基線,不能一上來就幾十、幾百個并發(fā)。
并發(fā)過程中,關(guān)注監(jiān)控 以及系統(tǒng)資源的利用。
若并發(fā)量大的情況,根據(jù)個人經(jīng)驗,并發(fā)過程中建議手動打開頁面查看真實響應(yīng)的用戶體驗。
壓測結(jié)果
監(jiān)控結(jié)果: 壓測結(jié)果符合要求。


日志分析:壓測日志數(shù)據(jù)由于服務(wù)器已經(jīng)歸還,下面是訂單列表jmeter壓測最終日志分析,可以通過命令行統(tǒng)計,實例如下:

其中一臺jmeter日志分析:結(jié)果中沒有返回數(shù)據(jù)為288926 ,總數(shù)440365 沒有返回數(shù)據(jù)的結(jié)果約占 65% 。
總結(jié)
1、確定目標QPS
QPS每秒查詢率(Query Per Second)
QPS:每秒請求數(shù),就是說服務(wù)器在一秒的時間內(nèi)處理了多少個請求。
TPS(Transactions Per Second):每秒事務(wù)數(shù),每秒系統(tǒng)能夠處理的事務(wù)次數(shù)
TPS可能包含多個QPS
2、壓測前需要和RD確認, 所調(diào)服務(wù)流量限制,以及白名單等
3、壓測代理機器,沙箱機器盡量多申請幾臺,并發(fā)測試一臺壓測機器可能并發(fā)不上去。
4、本次壓測只是單接口摸底測試。并沒有混合接口測試。若業(yè)務(wù)需要可以進行混合接口壓測,比較真實。
5、由于被壓測接口為內(nèi)部調(diào)用的接口,外部訪問不到。所以壓測的時候需要在沙箱機器上進行。
6、梳理壓測數(shù)據(jù),壓測方案,確定壓測場景。
