Jmeter&Apache&LR.VS.RPT

在使用Jmeter進(jìn)行接口的性能測(cè)試時(shí),由于Jmeter 是JAVA應(yīng)用,對(duì)于CPU和內(nèi)存的消耗比較大,所以,當(dāng)需要模擬數(shù)以萬計(jì)的并發(fā)用戶時(shí),使用單臺(tái)機(jī)器模擬所有的并發(fā)用戶就有些力不從心,甚至?xí)餔AVA內(nèi)存溢出錯(cuò)誤。為了讓jmeter工具提供更大的負(fù)載能力,這時(shí)可以使用Jmeter提供的分布式功能來啟動(dòng)多臺(tái)電腦來分壓測(cè)試。
熟悉 LoadRunner 的朋友一定不會(huì)對(duì)其 TPS(每秒事務(wù)數(shù))、TRT(事務(wù)響應(yīng)時(shí)間) 等視圖感到陌生,因?yàn)檫@是壓力測(cè)試最為關(guān)鍵的兩個(gè)指標(biāo)。JMeter 以其開源、輕巧、靈活、擴(kuò)展性高等特性贏得了廣大測(cè)試從業(yè)人員的青睞,但是它沒有像 LoadRunner 那樣提供一個(gè) TPS、TRT 之類的視圖,雖然聚合報(bào)告也能說明一些整體以及實(shí)時(shí)的問題,但是就整體趨勢(shì)、實(shí)時(shí)平均值走向、穩(wěn)定性報(bào)告方面就無能無力了,見下圖:

JMeter沒有TPS結(jié)果輸出界面.jpg
所幸的是,jmeter-plugins.org 這個(gè)網(wǎng)站為 JMeter 提供了一些增強(qiáng)型功能的插件,使用起來就像 Eclipse 裝插件一樣,完全做到了插件的可插拔特性。本文簡(jiǎn)要介紹如何使用這些插件讓你的 JMeter 支持 TPS、TRT 視圖。本文背景:JDK:1.7.0,
JMeter3.0,
OS:Win7 旗艦版。
http://www.cnblogs.com/Lam7/p/6833501.html
http://www.mamicode.com/info-detail-1394555.html
http://m.blog.csdn.net/DearMorning/article/details/71124175
http://www.cnblogs.com/wnfindbug/p/5505470.html

  1. 插件下載
    下載地址:https://jmeter-plugins.org/wiki/TransactionsPerSecond/,該插件最新版本為 2.0,大小 913 KB。筆者上傳了一份最新版本的 jpgc-graphs-basic-2.0.zip,有興趣的朋友可以去下載,下載地址:JMeter 每秒事務(wù)數(shù) TPS 插件。2. 解壓安裝
    將 jpgc-graphs-basic-2.0.zip 解壓縮后只有一個(gè) lib 目錄,該目錄下有一個(gè) ext 文件夾和一個(gè) jmeter-plugins-cmn-jmeter-0.3.jar 包,ext 文件夾中有 jmeter-plugins-graphs-basic-2.0.jar 和 jmeter-plugins-manager-0.10.jar 包。將 lib 目錄下的 jmeter-plugins-cmn-jmeter-0.3.jar 拷貝到 %JMeter%/lib 目錄下,將 ext 目錄下的 jmeter-plugins-graphs-basic-2.0.jar 和 jmeter-plugins-manager-0.10.jar 拷貝到 %JMeter%/lib/ext 目錄下,重啟 JMeter,發(fā)現(xiàn)已經(jīng)支持 TPS、TRT 等視圖了:
    已經(jīng)支持TPS了.png
    3. 壓測(cè)使用
    3.1. 添加 TPS 視圖
    線程組 -> 添加 -> 監(jiān)聽器 -> jp@gc Transaction per Second。某次壓測(cè)實(shí)際效果圖:
    TPS實(shí)際效果圖.png
    可以看出在該段時(shí)間內(nèi) TPS 大約維持在 6300 個(gè)左右。3.2. 添加 TRT 視圖
    線程組 -> 添加 -> 監(jiān)聽器 -> jp@gc Response Times Over Time。某次壓測(cè)實(shí)際效果圖:
    TRT實(shí)際效果圖.png
    可以看出在該段時(shí)間內(nèi) TRT 平均在 70ms 左右。
    http://www.cnblogs.com/whitewasher/p/6946207.html
    一、Jmeter分布式執(zhí)行原理:
      1、Jmeter分布式測(cè)試時(shí),選擇其中一臺(tái)作為控制機(jī)(Controller),其它機(jī)器做為代理機(jī)(Agent)。
      2、執(zhí)行時(shí),Controller會(huì)把腳本發(fā)送到每臺(tái)Agent上,Agent 拿到腳本后開始執(zhí)行,Agent執(zhí)行時(shí)不需要啟動(dòng)Jmeter,只需要把jmeter-server.bat文件打開,它應(yīng)該是通過命令行模式來執(zhí)行的。
      3、執(zhí)行后,Agent會(huì)把結(jié)果回傳給Controller,Controller會(huì)收集所有Agent的信息并匯總。

二、代理機(jī)(Agent)配置:
1、Agent機(jī)上需要安裝JDK、Jmeter,并且配置好環(huán)境變量。
2、打開“運(yùn)行”,輸入"cmd",打開運(yùn)行面板,輸入“ipconfig”,找到IP地址,例如是:192.168.8.149

3、打開Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把這一行修改為”remote_hosts=192.168.8.149:1099,1099是端口號(hào),可以隨意自定義。


4、打開jmeter-server.bat文件,就設(shè)置完成了,等待控制機(jī)(Controller)啟動(dòng)。

三、控制機(jī)(Controller)配置:
1、Controller機(jī)上需要安裝JDK、Jmeter,并且配置好環(huán)境變量。
2、打開“運(yùn)行”,輸入"cmd",打開運(yùn)行面板,輸入“ipconfig”,找到IP地址,例如是:192.168.8.174
  


3、打開Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把這一行修改為”remote_hosts=192.168.8.149:1099,192.168.8.174:1099,1099是端口號(hào),可以隨意自定義。如果有多臺(tái)代理機(jī),這里需要把所有的代理機(jī)的IP地址和端口號(hào)都加入進(jìn)來。

4、打開jmeter-server.bat文件,設(shè)置完成了。

四、開始添加線程組和請(qǐng)求來運(yùn)行查看結(jié)果:
1、打開jmeter.bat文件,添加線程組,編輯線程數(shù),這里設(shè)置100個(gè)線程數(shù),循環(huán)2次,就是一臺(tái)機(jī)器發(fā)送100*2=200個(gè)請(qǐng)求。

2、添加HTTP請(qǐng)求,這里以訪問淘寶為例。


3、添加察看結(jié)果數(shù)和聚合報(bào)告,點(diǎn)擊運(yùn)行,可以選擇遠(yuǎn)程啟動(dòng)或者遠(yuǎn)程全部啟動(dòng),如果是點(diǎn)擊遠(yuǎn)程啟動(dòng),可以選擇任意一臺(tái)電腦來運(yùn)行,如果是點(diǎn)擊遠(yuǎn)程全部啟動(dòng)就會(huì)運(yùn)行控制機(jī)和所有的代理機(jī)。


4、這里以點(diǎn)擊遠(yuǎn)程全部啟動(dòng)為例。運(yùn)行結(jié)束后,查看聚合報(bào)告,每臺(tái)電腦設(shè)置的線程數(shù)為200,這里一共是兩臺(tái)電腦,所以是200*2=400個(gè)線程數(shù)。


進(jìn)行Web的壓力測(cè)試
JMeter中最小的單位就是元件.你可以給你的測(cè)試計(jì)劃中增加若干的元件,每一個(gè)元件其實(shí)就是一個(gè)步驟.JMeter中設(shè)置了各種不同的元件:有設(shè)置用戶的,有設(shè)置定時(shí)器的,有設(shè)置前后置處理的,有設(shè)置斷言的還有設(shè)置監(jiān)聽器的.通過這些不同的元件的組合,我們就能很很容易的組合出更多不同的壓力測(cè)試用例.
我們以最簡(jiǎn)單的Web服務(wù)器的壓力測(cè)試為例,來演示下如何使用JMeter設(shè)置測(cè)試用例.
設(shè)置線程組(模擬用戶)
壓力測(cè)試不同于功能測(cè)試,軟件的正確性并不是它的測(cè)試重點(diǎn)。它所看重的是軟件的執(zhí)行效率,尤其是短時(shí)間內(nèi)訪問用戶數(shù)爆炸性增長(zhǎng)時(shí)軟件的響應(yīng)速度.因此就需要同時(shí)模擬多個(gè)用戶對(duì)系統(tǒng)進(jìn)行請(qǐng)求.因此,一般設(shè)置測(cè)試計(jì)劃的第一步都是創(chuàng)建一個(gè)線程組,用來模擬多個(gè)用戶的操作.

而后就需要設(shè)置線程組的一些屬性.
線程數(shù):相當(dāng)于是模擬用戶的數(shù)量.
準(zhǔn)備時(shí)長(zhǎng):表示線程之間間隔多少時(shí)間,單位是秒.0就表示了所有的線程并發(fā)發(fā)送請(qǐng)求,否則就是每個(gè)線程間隔幾秒發(fā)送請(qǐng)求
循環(huán)次數(shù):表示每個(gè)線程執(zhí)行幾次
調(diào)度器:就是創(chuàng)建線程的schedule.
在取樣器錯(cuò)誤后執(zhí)行的操作:表示線程出現(xiàn)錯(cuò)誤后執(zhí)行的操作.比如繼續(xù),或者停止線程,或者測(cè)試

設(shè)置HTTP請(qǐng)求
這里我們使用最簡(jiǎn)單的用例進(jìn)行測(cè)試——訪問我的博客的首頁(yè),測(cè)試QPS(Query Per Second 每秒查詢率)的情況.
因此,接下來我們需要增加的就是在線程組上面右鍵—-添加—-Sampler—-HTTP請(qǐng)求.

在JMetaer中取樣器(Sampler)就是與服務(wù)器進(jìn)行交互的元件.一個(gè)取樣器通常會(huì)進(jìn)行三個(gè)部分的工作:
向服務(wù)器發(fā)送請(qǐng)求
記錄服務(wù)器的響應(yīng)數(shù)據(jù)
記錄響應(yīng)的時(shí)間信息

這里我設(shè)置了:
服務(wù)器名稱: sunxiang0918.cn
端口號(hào): 80
HTTP請(qǐng)求實(shí)現(xiàn): JAVA
協(xié)議: http
方法: GET
ContentEncoding: UTF-8
路徑: /

其實(shí)這樣就算是完成了一個(gè)HTTP請(qǐng)求的設(shè)置了.這個(gè)時(shí)候我們就可以保存這個(gè)測(cè)試用例到一個(gè)JMX文件
中.然后執(zhí)行這個(gè)測(cè)試用例了. 不過,由于我們還沒有配置監(jiān)聽器元件,因此,現(xiàn)在運(yùn)行的話.我們是看不到任何的結(jié)果的.
請(qǐng)求參數(shù)模板化
在實(shí)際的使用中,我們的請(qǐng)求中可能有不同的參數(shù),并且這些參數(shù)可能是不相同的.這就需要把參數(shù)模板化.
在JMeter中,參數(shù)的語(yǔ)法是:${xxxx}
其中的xxxx
即為參數(shù)名. 通過這個(gè)語(yǔ)法,就可以在整個(gè)請(qǐng)求中調(diào)用參數(shù)的值. 只要我們對(duì)這些參數(shù)進(jìn)行賦值即可.

比如在這里我們?cè)黾右粋€(gè)Random Variable
.這個(gè)表示的是隨機(jī)的給一個(gè)變量進(jìn)行賦值.
我們?cè)谶@里設(shè)置了一個(gè)keyword
的變量,其值為0
到100
間的隨機(jī)數(shù).隨機(jī)方式采用默認(rèn)的.

然后在請(qǐng)求中增加一個(gè)請(qǐng)求的參數(shù):
執(zhí)行測(cè)試計(jì)劃,會(huì)發(fā)現(xiàn)請(qǐng)求的URL就會(huì)變成:GET http://sunxiang0918.cn/?aaaaa=xxxx49
,后面的數(shù)字就是隨機(jī).
除了隨機(jī)變量或用戶定義的變量外.還可以讀取CSV文件,通過CSV Data Set Config
,可以讀取CSV文件,并且制定每一列的變量名是什么.這樣就可以在請(qǐng)求的時(shí)候預(yù)設(shè)多個(gè)變量值.
增加響應(yīng)斷言
為了判斷結(jié)果的正確性,我們有時(shí)需要增加響應(yīng)的斷言.比如響應(yīng)代碼必須是200才作數(shù).JMeter中有一個(gè)元件就叫做響應(yīng)斷言
.這個(gè)就可以加在HTTP請(qǐng)求的后面,用來判斷結(jié)果是否正確.

在這里我只增加了一個(gè)最簡(jiǎn)單的通過響應(yīng)代碼來判斷請(qǐng)求是否正確.

除此之外,它還能通過響應(yīng)的內(nèi)容,響應(yīng)的頭信息等來進(jìn)行判斷.功能非常的強(qiáng)大.
設(shè)置結(jié)果監(jiān)聽器
為了我們能查看到請(qǐng)求的結(jié)果,我們需要再添加監(jiān)聽器.在這里我們?cè)黾尤齻€(gè)結(jié)果監(jiān)聽器:察看結(jié)果樹
圖形結(jié)果
以及聚合報(bào)告
查看結(jié)果樹
可以查看到每一次請(qǐng)求的具體情況,包括了請(qǐng)求參數(shù),結(jié)果反饋,請(qǐng)求時(shí)間等等.圖形結(jié)果
可以以圖形的方式展現(xiàn)請(qǐng)求的中和結(jié)果.聚合報(bào)告
會(huì)展示本次測(cè)試計(jì)劃所有的請(qǐng)求的一個(gè)聚合的結(jié)果.

這幾個(gè)結(jié)果監(jiān)聽器都不需要什么設(shè)置.增加后,即可再執(zhí)行一次測(cè)試計(jì)劃.里面就會(huì)有結(jié)果了.

我們先來看查看結(jié)果樹
.它顯示了這次請(qǐng)求的所有信息.比如開始時(shí)間,線程名字,完成用時(shí),請(qǐng)求大小,反饋大小,反饋代碼,采樣次數(shù),錯(cuò)誤信息,反饋頭信息,反饋體等等.通過這個(gè)列表,我們就能很清楚的知道所有請(qǐng)求的大概情況.

然后就是圖形結(jié)果
從這個(gè)圖上就能很清楚的看出整個(gè)請(qǐng)求和響應(yīng)的趨勢(shì).

最后就是聚合報(bào)告
.它用表格的形式展示了本次測(cè)試的總體情況.
LabelSamplesAverageMedian90%Line95%Line99%LineMinMaxErrorThroughputKB/sec名稱采樣請(qǐng)求數(shù)平均響應(yīng)時(shí)間中位數(shù)90%用戶響應(yīng)時(shí)間95%用戶響應(yīng)時(shí)間99%用戶響應(yīng)時(shí)間最小響應(yīng)時(shí)間最大響應(yīng)時(shí)間錯(cuò)誤請(qǐng)求百分比吞吐量,每秒完成請(qǐng)求數(shù)每秒接收數(shù)據(jù)量HTTP請(qǐng)求20081166015371886242227534240.00%15.8/sec542.3
限制QPS
為了了解博客的首頁(yè)在負(fù)載達(dá)到30QPS時(shí)的響應(yīng)時(shí)間,我們就需要控制向博客首頁(yè)發(fā)送請(qǐng)求的負(fù)載為固定的30QPS.JMeter提供了一個(gè)非常有用的定時(shí)器:Constant Throughput Timer
(常數(shù)吞吐量定時(shí)器),通過該定時(shí)器可以方便的控制給一個(gè)采樣器發(fā)送請(qǐng)求的吞吐量.

首先是Target throughput
目標(biāo)吞吐量,需要注意的是這個(gè)的單位是分鐘. 比如我們要測(cè)試的是30QPS,那么一分鐘的吞吐量就是 1800.而Calculate Throughput based on
有五個(gè)選項(xiàng):
This thread only:控制每一個(gè)線程的吞吐量.這個(gè)時(shí)候,總吞吐量就是Target throughput
乘以線程數(shù)
All active threads:設(shè)置總體的吞吐量,它會(huì)把Target throughput
分配到每一個(gè)活躍的想成上.
All active threads in current thread group.設(shè)置總體的吞吐量,它會(huì)把Target throughput
分配到每一個(gè)活躍的想成上.當(dāng)一個(gè)測(cè)試計(jì)劃中只有一個(gè)測(cè)試組的時(shí)候,效果和All active threads
是一樣的.
All active threads(shared):與All active threads
的區(qū)別在于,每個(gè)活躍線程都會(huì)在所有活躍線程上一次運(yùn)行結(jié)束后等待一定的時(shí)間后再次運(yùn)行.
All active threads in current thread group(shared):與All active threads in current thread group
的區(qū)別在于,每個(gè)活躍線程都會(huì)在所有活躍線程上一次運(yùn)行結(jié)束后等待一定的時(shí)間后再次運(yùn)行.

因此,我們這里選擇了All active threads

版權(quán)歸作者所有,任何形式轉(zhuǎn)載請(qǐng)聯(lián)系作者。
作者:hèihèi(來自豆瓣)
來源:https://www.douban.com/note/569104696/

做web項(xiàng)目測(cè)試,登陸的測(cè)試是必不可少的。通過學(xué)習(xí)邏輯控制器內(nèi)容,了解到其中ForEach Controller 可很好的與config element中的user defined variables配合使用,可依次申請(qǐng)到預(yù)設(shè)變量值。便希望通過foreach控制器實(shí)現(xiàn)多用戶并發(fā)登陸測(cè)試。但是在使用過程中發(fā)現(xiàn),user defined variables每次只可以請(qǐng)求到一個(gè)參數(shù)。對(duì)于,用戶名、密碼驗(yàn)證登陸這一方式,需要請(qǐng)求兩個(gè)變量完成業(yè)務(wù)的形式,是無法實(shí)現(xiàn)的,(即使添加兩組user defined variables也不能很好完成這一任務(wù))。
于是在config element中發(fā)現(xiàn)了CSV Data Set Config。
首先將需要申請(qǐng)的數(shù)據(jù)存放到一新建txt文件中,數(shù)組間以換行形式隔離,同一組數(shù)據(jù)以;,等隔開,如是tab,用/t,并以.csv格式保存。

修改CSV Data Set Config中參數(shù):

filename:參數(shù)文件保存路徑及文件名
File Encoding: 文件編碼,默認(rèn)為ANSI
Varible Names: 定義文本文件中的參數(shù)名,參數(shù)之間逗號(hào)分隔.定義后可在腳本在以Shell變量的同樣的方式引用
Allow Quoated data: 雙引號(hào)相關(guān)
Recycle on EOF: 設(shè)置為True后,允許循環(huán)取值
Stop Thread on EOF: 當(dāng)Recycle on EOF為false并且Stop Thread on EOF為true,則讀完csv文件中的記錄后,停止運(yùn)行
Sharing Mode: 設(shè)置是否線程共享

然后設(shè)置線程組線程數(shù),一般用戶數(shù)與線程數(shù)相同;
添加登陸的http請(qǐng)求,設(shè)置發(fā)送請(qǐng)求的參數(shù):

其中值${ }與CSV Data Set Config中參數(shù)名相對(duì)應(yīng)
在請(qǐng)求后添加響應(yīng)斷言檢查是否正確

1.jmeter安裝
1)window系統(tǒng),下載.zip包解壓,添加環(huán)境變量,就ok . windows系統(tǒng)安裝jmeter
2)linux安裝,下載tar.gz包解壓,添加環(huán)境變量,linux系統(tǒng)安裝jmeter
cat /etc/profile

JDK配置export JAVA_HOME=/opt/product/test/tools/jdk1.8.0_111export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar#Jmeter配置export JMETER=/opt/apache-jmeter-3.0export CLASSPATH=${JMETER}/lib/ext/ApacheJMeter_core.jar:${JMETER}/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar:${CLASSPATH} export PATH=${JMETER}/bin/:${PATH}

驗(yàn)證是否安裝好,返回如下的信息就代表安裝好了
[root@localhost bin]# java -versionjava version "1.8.0_111"Java(TM) SE Runtime Environment (build 1.8.0_111-b14)Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)[root@localhost bin]# [root@localhost bin]# jmeter -vWriting log file to: /opt/apache-jmeter-3.0/bin/jmeter.log _ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____ / \ | _ \ / \ / | | | | ____| | | / | ____| | ____| _ \ / _ \ | |) / _ | | | || | | _ | | |/| | | | | | | | |) | / ___ | / ___ \ || _ | |_ | || | | | | |__ | | | || _ < // __| // __|| ||_____| _/|| ||_____| || |_____|| _\ 3.0 r1743807 Copyright (c) 1999-2016 The Apache Software Foundation[root@localhost bin]#

1.在windows環(huán)境錄制測(cè)試計(jì)劃
1)打開jmeter,創(chuàng)建測(cè)試計(jì)劃(線程組-sampler(HTTP請(qǐng)求-監(jiān)聽器(查看結(jié)果樹、聚合報(bào)告)))


100個(gè)并發(fā)打壓2分鐘.png

HTTP請(qǐng)求,填寫IP,端口,請(qǐng)求方法,路徑,參數(shù)名稱和值


HTTP請(qǐng)求.png

以上截圖中的參數(shù)名稱是接口文檔里面定義的,值是我們?cè)O(shè)定的。設(shè)定參數(shù)值的方法很多,第一個(gè)方法 是在文件中取值,比如第一個(gè)參數(shù) UserID 是在一個(gè)文件中去的,如果在文件中取值需要添加 配置元件(CSV Date Set Config)進(jìn)行參數(shù)化,如下圖:


配置元件.png

取參數(shù)也可以通過函數(shù) 動(dòng)態(tài)生成數(shù)據(jù),如 ${__RandomString(8,324YFHDDN0098432U2J32EWWDDYEHD,)}指在后面的字符中隨機(jī)取8個(gè)數(shù)字。
查看結(jié)果樹和聚合報(bào)告是用來查看執(zhí)行計(jì)劃是否成功以及各項(xiàng)指標(biāo)的。


保存測(cè)試計(jì)劃.png

最后把跑通的腳本保存為 .jmx文件。
2.在linux環(huán)境執(zhí)行測(cè)試計(jì)劃(打壓)
把腳本上傳到 linxu環(huán)境,可以在腳本里面直接修改參數(shù)(并發(fā)數(shù)、運(yùn)行時(shí)間、參數(shù)文件的位置)在 jmeter 的bin目錄下執(zhí)行測(cè)試計(jì)劃,執(zhí)行命令如下;
jmeter -n -t ncindex-collect.jmx -l result.jtl -e -o ResultReport#ncindex-collect.jmx是腳本名字,result.jtl 是生成的日志文件,ResultReport是生成的報(bào)告目錄· -h 幫助 -> 打印出有用的信息并退出· -n 非 GUI 模式 -> 在非 GUI 模式下運(yùn)行 JMeter· -t 測(cè)試文件 -> 要運(yùn)行的 JMeter 測(cè)試腳本文件· -l 日志文件 -> 記錄結(jié)果的文件· -r 遠(yuǎn)程執(zhí)行 -> 啟動(dòng)遠(yuǎn)程服務(wù)· -H 代理主機(jī) -> 設(shè)置 JMeter 使用的代理主機(jī)· -P 代理端口 -> 設(shè)置 JMeter 使用的代理主機(jī)的端口號(hào)

執(zhí)行命令后還需要觀察打壓過程是否有報(bào)錯(cuò),監(jiān)控linux服務(wù)器的cpu 、內(nèi)存、負(fù)載等。


跑腳本的過程.png

服務(wù)器性能監(jiān)控.png

probe監(jiān)控應(yīng)用耗費(fèi)內(nèi)存.png

如果腳本過程有報(bào)錯(cuò),還要去監(jiān)控應(yīng)用的日志,我在打壓的時(shí)候應(yīng)用日志就報(bào)了內(nèi)存泄露;


應(yīng)用日志報(bào)錯(cuò).png

這時(shí)候需要分析內(nèi)存泄露在什么地方,什么地方占用內(nèi)存,執(zhí)行命令:
jmap -dump:format=b,file=mem.dat PID

dump下來的文件需要用工具分析,具體使用工具 Memory Analyzer,是一個(gè)eclipse插件 ,也可以單獨(dú)使用,安裝以及使用方法見 :MAT Memory Analyzer Tool 插件安裝(圖解) 性能分析工具之-- Eclipse Memory Analyzer tool(MAT)(二)使用 Eclipse Memory Analyzer 進(jìn)行堆轉(zhuǎn)儲(chǔ)文件分析分析后會(huì)生成的報(bào)告見:

轉(zhuǎn)儲(chǔ)分析報(bào)告.png

大體意思就是 大部分的內(nèi)存泄露是因?yàn)?"java.util.concurrent.ConcurrentHashMap$Node[]" 還可以看具體報(bào)告的細(xì)節(jié),雖然看不大懂,但是知道肯定是代碼引起的。打壓過程還有個(gè)很奇怪的現(xiàn)象就是打壓完成后 內(nèi)存和cpu好久都下不來,這明顯是不正常的。對(duì)比圖如下:

Paste_Image.png

后來就把報(bào)告發(fā)給研發(fā)分析,也發(fā)給我們經(jīng)理看了下,最終他們給出的結(jié)果是 被壓的頁(yè)面沒有關(guān)閉session,如下修改:
<%@ page session="false" contentType="text/html;charset=UTF-8" language="java"%>

后來關(guān)閉后再打壓果然不報(bào)錯(cuò)了,老大說這種這種問題很常見,不得不感嘆經(jīng)驗(yàn)很重要呀!
最后展示一下某個(gè)接口的打壓情況:


接口打壓統(tǒng)計(jì).png

接口打壓統(tǒng)計(jì).png

現(xiàn)在打壓出了接口的TPS,但是我還不知道要根據(jù)這個(gè)TPS怎么判斷出使用幾臺(tái)服務(wù)器,周一把數(shù)據(jù)匯報(bào)給經(jīng)理再確定。和老大商討后的結(jié)果:根據(jù)現(xiàn)網(wǎng)10W認(rèn)證用戶可以算出:


現(xiàn)網(wǎng)目前的TPS.png

就算用戶增加到200W,算出來的 是:600多,但是打壓出來的系統(tǒng)能力遠(yuǎn)不止這些,所以目前2臺(tái)服務(wù)器就可以支撐了。

################################################################
Jmeter之http性能測(cè)試實(shí)戰(zhàn) 非GUI模式壓測(cè) NON-GUI模式 結(jié)果解析TPS——干貨(十一)

性能測(cè)試計(jì)劃
性能測(cè)試用例
錄制腳本
性能測(cè)試結(jié)果
性能測(cè)試報(bào)告
性能測(cè)試監(jiān)控報(bào)告

準(zhǔn)備工作
從腳本已錄制成功之后開始進(jìn)行壓測(cè)
安裝Jmeter拓展插件 查看 Transactions per Second* https://jmeter-plugins.org/wiki/TransactionsPerSecond/ ←插件地址*
在壓測(cè)前先安裝 Nmon監(jiān)控工具在服務(wù)器linux性能監(jiān)控分析及通過nmon_analyse生成分析報(bào)表

PS :安裝 TPS教程

解壓安裝
將 jpgc-graphs-basic-2.0.zip 解壓縮后只有一個(gè) lib 目錄,該目錄下有一個(gè) ext 文件夾和一個(gè) jmeter-plugins-cmn-jmeter-0.3.jar 包,ext 文件夾中有 jmeter-plugins-graphs-basic-2.0.jar 和 jmeter-plugins-manager-0.10.jar 包。將 lib 目錄下的 jmeter-plugins-cmn-jmeter-0.3.jar 拷貝到 %JMeter%/lib 目錄下,將 ext 目錄下的 jmeter-plugins-graphs-basic-2.0.jar 和 jmeter-plugins-manager-0.10.jar 拷貝到 %JMeter%/lib/ext 目錄下,重啟 JMeter,發(fā)現(xiàn)已經(jīng)支持 TPS、TRT 等視圖了:


TPS導(dǎo)入解析測(cè)試報(bào)告

導(dǎo)入之后就可以看到 TPS數(shù)據(jù)了


取至Jmeter官方文檔
1.0.2 Load Test running
Once your Test Plan is ready, you can start your Load Test. The first step is to configure the injectors that will run JMeter, this as for any other Load Testing tool includes:
Correct machine sizing in terms of CPU, memory and network
OS Tuning
Java setup: Ensure you install the latest version of Java supported by JMeter
Correct sizing of Java Heap. By default JMeter runs with a heap of 512MB, this might not be enough for your test and depends on your test plan and number of threads you want to run

Once everything is ready, you will use Command-line mode (called Non-GUI mode) to run it for the Load Test.
Don't run load test using GUI mode !
不要使用GUI模式運(yùn)行負(fù)載測(cè)試!因?yàn)镚UI模式的話會(huì)占用比較大的內(nèi)存空間,并發(fā)數(shù)量上不去等等的問題

Using Non-GUI mode, you can generate a CSV (or XML) file containing results and have JMeter generate an HTML report at end of Load Test. JMeter will by default provide a summary of load test while it's running. You can also have real-time results during your test using Backend Listener.

NON-GUI模式允許得到結(jié)果后可以在后端監(jiān)聽器的測(cè)試期間獲得實(shí)時(shí)結(jié)果。這句話如何理解呢,見上面“TPS導(dǎo)入解析測(cè)試報(bào)告

Running JMeter
To run Apache JMeter in NON_GUI
直接進(jìn)入腳本路徑,輸入 Jmeter的啟動(dòng)路徑
可以查看到Jmeter的相關(guān)命令幫助
小七的Jmeter路徑是安裝在D:\Jmeter\jmeter-3.1 所以直接進(jìn)入bin目錄下 找到j(luò)meter 查看H幫助文檔


C:\Users\lamw\Desktop\lamwλ D:\Jmeter\jmeter-3.1\bin\jmeter -hWriting log file to: C:\Users\lamw\Desktop\lamw\jmeter.log
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____ / \ | _ \ / \ / | | | | ____| | | / | ____| | ____| _ \ / _ \ | |) / _ | | | || | | _ | | |/| | | | | | | | |) | / ___ | / ___ \ || _ | |_ | || | | | | |__ | | | || _ <// __| // __|| ||_____| _/|| ||_____| || |_____|| _\ 3.1 r1770033

Copyright (c) 1999-2016 The Apache Software Foundation
To list all command line options, open a command prompt and type:
jmeter.bat(Windows)/jmeter.sh(Linux) -?


To run Apache JMeter in GUI mode, open a command prompt and type:
jmeter.bat(Windows)/jmeter.sh(Linux) [-p property-file]


To run Apache JMeter in NON_GUI mode:Open a command prompt (or Unix shell) and type:
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file]


To run Apache JMeter in NON_GUI mode and generate a report at end :Open a command prompt (or Unix shell) and type:
jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder]
--------------------------------------------------To generate a Report from existing CSV file:Open a command prompt (or Unix shell) and type:
jmeter.bat(Windows)/jmeter.sh(Linux) -g [csv results file] -o [path to output folder (empty or not existing)]


To tell Apache JMeter to use a proxy server:Open a command prompt and type:
jmeter.bat(Windows)/jmeter.sh(Linux) -H [your.proxy.server] -P [your proxy server port]


To run Apache JMeter in server mode:Open a command prompt and type:
jmeter-server.bat(Windows)/jmeter-server(Linux)


上面包含了一些參數(shù) 可以輸入 -l 查看


復(fù)制代碼

C:\Users\lamw\Desktop\lamwλ D:\Jmeter\jmeter-3.1\bin\jmeter -lUsage --? print command line options and exit -h, --help print usage information and exit -v, --version print the version information and exit -p, --propfile <argument> the jmeter property file to use -q, --addprop <argument> additional JMeter property file(s) -t, --testfile <argument> the jmeter test(.jmx) file to run -l, --logfile <argument> the file to log samples to -j, --jmeterlogfile <argument> jmeter run log file (jmeter.log) -n, --nongui run JMeter in nongui mode -s, --server run the JMeter server -H, --proxyHost <argument> Set a proxy server for JMeter to use -P, --proxyPort <argument> Set proxy server port for JMeter to use -N, --nonProxyHosts <argument> Set nonproxy host list (e.g. *.apache.org|localhost) -u, --username <argument> Set username for proxy server that JMeter is to use -a, --password <argument> Set password for proxy server that JMeter is to use -J, --jmeterproperty <argument>=<value> Define additional JMeter properties -G, --globalproperty <argument>=<value> Define Global properties (sent to servers) e.g. -Gport=123 or -Gglobal.properties -D, --systemproperty <argument>=<value> Define additional system properties -S, --systemPropertyFile <argument> additional system property file(s) -L, --loglevel <argument>=<value> [category=]level e.g. jorphan=INFO or jmeter.util=DEBUG -r, --runremote Start remote servers (as defined in remote_hosts) -R, --remotestart <argument> Start these remote servers (overrides remote_hosts) -d, --homedir <argument> the jmeter home directory to use -X, --remoteexit Exit the remote servers at end of test (non-GUI) -g, --reportonly <argument> generate report dashboard only, from a test results file -e, --reportatendofloadtests generate report dashboard after load test -o, --reportoutputfolder <argument> output folder for report dashboard


復(fù)制代碼

下面我們就采用 NON_GUI模式執(zhí)行腳本 如下:


復(fù)制代碼

--------------------------------------------------To run Apache JMeter in NON_GUI mode and generate a report at end :Open a command prompt (or Unix shell) and type:jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder]--------------------------------------------------


復(fù)制代碼
復(fù)制代碼

輸入以下命令直接執(zhí)行錄制好的腳本文件C:\Users\lamw\Desktop\lamwλ D:\Jmeter\jmeter-3.1\bin\jmeter.bat -n -t test.jmx -l test_report_01.csv -e -o test_report_01命令解析:
C:\Users\lamw\Desktop\lamw 這個(gè)是測(cè)試腳本所在的文件目錄


D:\Jmeter\jmeter-3.1\bin\jmeter.bat --------Jmeter.bat 的執(zhí)行路徑
-n, --nongui -------------以nongui模式執(zhí)行run JMeter in nongui mode

-t, --testfile <argument>-------------壓測(cè)腳本文件jmxthe jmeter test(.jmx) file to run
-l, --logfile <argument>-------------將樣本記錄到的文件the file to log samples to
-e, --reportatendofloadtests------------ 在加載測(cè)試后生成報(bào)告儀表板generate report dashboard after load test-o, --reportoutputfolder <argument>---------------- 報(bào)告儀表板的輸出文件夾output folder for report dashboard

復(fù)制代碼

運(yùn)行腳本進(jìn)行壓測(cè)



當(dāng)然,在運(yùn)行腳本進(jìn)行壓測(cè)的時(shí)候 需要在服務(wù)器 先執(zhí)行 采集命令
ps -ef | grep nmon 查看采集數(shù)據(jù)的進(jìn)程
[root@lamw /home/lam7/nmon]# ps -ef | grep nmon
[root@lamw /home/lam7/nmon]# nmon -f -s 1 -c 60

-f 表示生成的數(shù)據(jù)文件名中有時(shí)間;
-t 輸出中包括占用率較高的進(jìn)程;
-s 1 表示每 1 秒采集一次數(shù)據(jù);
-c 60 表示采集 60 次,1s*60=60秒;
至于監(jiān)控的方式可以查看上面所講的準(zhǔn)備工作第三點(diǎn)
.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容