Jmeter壓測之jtl文件解析

一贮勃、背景

最近在做性能壓測方面的工作,用的壓測工具是Jmeter。Jmeter中有一個插件叫
jp@gc Throughput Shaping Timer。翻譯過來就是吞吐量整形定時器匣吊。如下圖:


Throughput Shaping Timer

它可以設(shè)計梯度的并發(fā)請求,并且每種并發(fā)請求量(RPS)都可以設(shè)定執(zhí)行的時間。
壓測完成后色鸳,可以通過Jmeter的聚合報告查看壓測結(jié)果侣灶。如下圖:


聚合報告

但是這里存在一個問題。就是如果我想要知道每一種RPS下的平均響應(yīng)時間缕碎,TP90,TP95,TP99,錯誤率褥影,吞吐量等信息,就沒有辦法從聚合報告中獲取咏雌》苍酰可能Jmter提供了類似功能的插件,但是我沒有找到赊抖。

我們都知道Jmeter的壓測結(jié)果是jtl文件统倒,不知道大家有沒有看過jtl文件里面的內(nèi)容。就是就是一行行的請求記錄氛雪。如下圖:

1542884219661,5,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,5
1542884219690,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,4
1542884219718,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219772,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219772,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219702,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219728,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219695,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219731,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219698,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219734,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219702,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219737,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,4
1542884219705,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219741,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219709,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219745,2,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,2
1542884219712,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219748,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,2
1542884219715,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219719,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219751,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219722,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219754,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,4
1542884219725,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219758,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219728,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219761,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,4
1542884219731,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219705,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219765,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219734,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,4
1542884219708,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,4
1542884219768,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219738,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219712,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
1542884219771,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3

上面是我截取的一部分jtl文件的內(nèi)容房匆。下面做一下解釋:

1542884219715,4,http請求,200,OK,Stepping Thread Group 1-1,text,true,318,1,1,3
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

請求發(fā)出的絕對時間,響應(yīng)時間报亩,請求的標簽浴鸿,返回碼,返回消息弦追,請求所屬的線程岳链,數(shù)據(jù)類型,是否成功劲件,失敗信息掸哑,字節(jié),響應(yīng)時間

倒數(shù)第二位和第三位沒搞懂是什么意思零远,不過不影響苗分。

二、實現(xiàn)

有了上面的jtl知識后牵辣,相信有點程序基礎(chǔ)的同學(xué)都可以設(shè)計程序來實現(xiàn)獲得每種RPS的壓測結(jié)果信息摔癣。
貼一下我自己的代碼
首先是JtlResolver類

package com.lin.performance.testing;

import com.alibaba.fastjson.JSONObject;
import com.lin.performance.testing.po.SceneResult;
import org.apache.commons.lang3.time.DateFormatUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class JtlResolver {


    public  String resloveJtl(File file,List<Integer> durationList) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        String oneLine = null;

        //所有的行
        List<String> totalLines = new ArrayList<String>();

        List<Long> timestampList = new ArrayList<Long>();

        while ((oneLine = br.readLine()) != null){
            totalLines.add(oneLine);
            String[] split = oneLine.split(",");
            String timestampStr = split[0];
            Long timestamp = Long.valueOf(timestampStr);
            timestampList.add(timestamp);
        }
        System.out.println("totalLines:"+totalLines.size());
        System.out.println("第一行:"+totalLines.get(0));
        System.out.println("最后一行:"+totalLines.get(totalLines.size()-1));
        System.out.println();
        //壓測開始時間
        String allStartTimestampStr = totalLines.get(0).split(",")[0];
        Long allStartTime = Long.valueOf(allStartTimestampStr);

        //壓測結(jié)束時間
        String  allEndTimestampStr = totalLines.get(totalLines.size() - 1).split(",")[0];
        Long allEndTime = Long.valueOf(allEndTimestampStr);

        Long startTime = allStartTime;
        Long endTime = allEndTime;
        Integer startIndex = 0;

        for (int i=0;i<durationList.size();i++){
            Integer duration = durationList.get(i);

            if (durationList.size() != 1){
                endTime = startTime + duration*1000;
            }
            if (i == (durationList.size() - 1)){
                endTime = allEndTime;
            }
            //計算開始和結(jié)束
            Integer endIndex = getEndIndex(endTime, timestampList);

            getOneRpsResult(startIndex,endIndex,startTime,endTime,timestampList,totalLines);
            startTime = endTime;
            startIndex = endIndex;
        }

        return null;
    }

    private void getOneRpsResult(Integer startIndex,Integer endIndex,Long startTime,Long endTime,List<Long> timestampList,List<String> totalLines){


        int index=0;
        //總的響應(yīng)時間
        int sumElapsed=0;
        Integer failSize = 0;
        Integer totalBytes = 0;
        List<Integer> elapsedList = new ArrayList<Integer>();

        for (Integer i = startIndex;i<=endIndex;i++){
            try {
                String row = totalLines.get(i);
                String[] split = row.split(",");


                //響應(yīng)時間
                String elapsed = split[1];
                sumElapsed += Integer.valueOf(elapsed);
                elapsedList.add(Integer.valueOf(elapsed));
                //成功與否
                String success = split[7];
                if (!"true".equals(success)){
                    failSize++;
                }
                //字節(jié)
                String bytes = split[8];
                totalBytes += Integer.valueOf(bytes);

                index++;
            }catch (Exception e){
                System.out.println("exception i:"+i);
            }

        }



        Collections.sort(elapsedList, new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });


        Integer tp90 = elapsedList.size()*9/10;
        Integer tp95 = elapsedList.size()*95/100;
        Integer tp99 = elapsedList.size()*99/100;

        Long l = timestampList.get(index-1) - timestampList.get(0);

        SceneResult sceneResult = new SceneResult();
        sceneResult.setStartTimeStr(DateFormatUtils.format(startTime,"yyyy-MM-dd HH:mm:ss"));
        sceneResult.setEndTimeStr(DateFormatUtils.format(endTime,"yyyy-MM-dd HH:mm:ss"));
        sceneResult.setSamples(index+"");
        sceneResult.setAverage(sumElapsed/index+"");
        sceneResult.setTp90(elapsedList.get(tp90)+"");
        sceneResult.setTp95(elapsedList.get(tp95)+"");
        sceneResult.setTp99(elapsedList.get(tp99)+"");
        sceneResult.setMin(elapsedList.get(0)+"");
        sceneResult.setMax(elapsedList.get(index-1)+"");
        sceneResult.setMedian(elapsedList.get(index/2)+"");
        sceneResult.setErrors(String.format("%.2f",failSize*100.0/index)+"%");
        sceneResult.setThroughput(String.format("%.2f",index*1.0/(l*1.0/1000)));
        sceneResult.setKbPerSec(String.format("%.2f",totalBytes*1.0/1024/(l*1.0/1000)));
        System.out.println(JSONObject.toJSONString(sceneResult));
        System.out.println();

    }
    private  Integer getStartIndex(Long startTime,List<Long> timestampList){
        int index = 0;
        for (int i=0;i<timestampList.size()-1;i++){
            if (startTime.longValue() >= timestampList.get(i).longValue() && startTime.longValue() <= timestampList.get(i+1).longValue()){
                return index;
            }
            index++;
        }
        return index;
    }

    private  Integer getEndIndex(Long endTime,List<Long> timestampList){
        for (int i=timestampList.size()-1;i>=0;i--){

            if (endTime.longValue() >= timestampList.get(i).longValue()){
                return i;
            }
        }
        return 0;
    }
    public static void main(String[] args) throws IOException {
        List<Integer> durationList = new ArrayList<Integer>();
        durationList.add(10);
        durationList.add(10);
        durationList.add(10);
        durationList.add(10);
        durationList.add(10);
        durationList.add(10);
        File file = new File("/Users/xmly/Documents/stresstest/jtl/welfare-banners-1-5.jtl");

        new JtlResolver().resloveJtl(file,durationList);
    }
}


然后是SceneResult類

package com.lin.performance.testing.po;

public class SceneResult {
    /**開始壓測時間*/
    private String startTimeStr;

    /**結(jié)束壓測時間*/
    private String endTimeStr;

    /**壓測請求數(shù)*/
    private String samples;

    /**平均響應(yīng)時間*/
    private String average;

    /**90% Line*/
    private String tp90;

    /**95% Line*/
    private String tp95;

    /**99% Line*/
    private String tp99;

    /**最小請求時間*/
    private String min;

    /**最大請求時間*/
    private String max;

    /**錯誤率*/
    private String errors;

    /** throughput */
    private String throughput;

    /**吞吐量 KB/sec*/
    private String kbPerSec;

    /**中間時間*/
    private String median;

    public String getMedian() {
        return median;
    }

    public void setMedian(String median) {
        this.median = median;
    }

    public String getSamples() {
        return samples;
    }

    public void setSamples(String samples) {
        this.samples = samples;
    }

    public String getAverage() {
        return average;
    }

    public void setAverage(String average) {
        this.average = average;
    }

    public String getTp90() {
        return tp90;
    }

    public void setTp90(String tp90) {
        this.tp90 = tp90;
    }

    public String getTp95() {
        return tp95;
    }

    public void setTp95(String tp95) {
        this.tp95 = tp95;
    }

    public String getTp99() {
        return tp99;
    }

    public void setTp99(String tp99) {
        this.tp99 = tp99;
    }

    public String getMin() {
        return min;
    }

    public void setMin(String min) {
        this.min = min;
    }

    public String getMax() {
        return max;
    }

    public void setMax(String max) {
        this.max = max;
    }

    public String getErrors() {
        return errors;
    }

    public void setErrors(String errors) {
        this.errors = errors;
    }

    public String getThroughput() {
        return throughput;
    }

    public void setThroughput(String throughput) {
        this.throughput = throughput;
    }

    public String getKbPerSec() {
        return kbPerSec;
    }

    public void setKbPerSec(String kbPerSec) {
        this.kbPerSec = kbPerSec;
    }

    public String getStartTimeStr() {
        return startTimeStr;
    }

    public void setStartTimeStr(String startTimeStr) {
        this.startTimeStr = startTimeStr;
    }

    public String getEndTimeStr() {
        return endTimeStr;
    }

    public void setEndTimeStr(String endTimeStr) {
        this.endTimeStr = endTimeStr;
    }
}

運行JtlResolver類中的main方法,獲得的結(jié)果如下:

/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/tools.jar:/Users/xmly/workspace/java/performance-testing/target/classes:/Users/xmly/workspace/repository/org/apache/logging/log4j/log4j-core/2.9.1/log4j-core-2.9.1.jar:/Users/xmly/workspace/repository/org/apache/logging/log4j/log4j-api/2.10.0/log4j-api-2.10.0.jar:/Users/xmly/workspace/repository/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar:/Users/xmly/workspace/repository/com/alibaba/fastjson/1.2.53/fastjson-1.2.53.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot-starter-web/2.0.5.RELEASE/spring-boot-starter-web-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot-starter/2.0.5.RELEASE/spring-boot-starter-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot/2.0.5.RELEASE/spring-boot-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot-autoconfigure/2.0.5.RELEASE/spring-boot-autoconfigure-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot-starter-logging/2.0.5.RELEASE/spring-boot-starter-logging-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar:/Users/xmly/workspace/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar:/Users/xmly/workspace/repository/org/apache/logging/log4j/log4j-to-slf4j/2.10.0/log4j-to-slf4j-2.10.0.jar:/Users/xmly/workspace/repository/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar:/Users/xmly/workspace/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar:/Users/xmly/workspace/repository/org/yaml/snakeyaml/1.19/snakeyaml-1.19.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot-starter-json/2.0.5.RELEASE/spring-boot-starter-json-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/com/fasterxml/jackson/core/jackson-databind/2.9.6/jackson-databind-2.9.6.jar:/Users/xmly/workspace/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar:/Users/xmly/workspace/repository/com/fasterxml/jackson/core/jackson-core/2.9.6/jackson-core-2.9.6.jar:/Users/xmly/workspace/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.9.6/jackson-datatype-jdk8-2.9.6.jar:/Users/xmly/workspace/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.6/jackson-datatype-jsr310-2.9.6.jar:/Users/xmly/workspace/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.9.6/jackson-module-parameter-names-2.9.6.jar:/Users/xmly/workspace/repository/org/springframework/boot/spring-boot-starter-tomcat/2.0.5.RELEASE/spring-boot-starter-tomcat-2.0.5.RELEASE.jar:/Users/xmly/workspace/repository/org/apache/tomcat/embed/tomcat-embed-core/8.5.34/tomcat-embed-core-8.5.34.jar:/Users/xmly/workspace/repository/org/apache/tomcat/embed/tomcat-embed-el/8.5.34/tomcat-embed-el-8.5.34.jar:/Users/xmly/workspace/repository/org/apache/tomcat/embed/tomcat-embed-websocket/8.5.34/tomcat-embed-websocket-8.5.34.jar:/Users/xmly/workspace/repository/org/hibernate/validator/hibernate-validator/6.0.12.Final/hibernate-validator-6.0.12.Final.jar:/Users/xmly/workspace/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar:/Users/xmly/workspace/repository/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar:/Users/xmly/workspace/repository/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar:/Users/xmly/workspace/repository/org/springframework/spring-web/5.0.9.RELEASE/spring-web-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-beans/5.0.9.RELEASE/spring-beans-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-webmvc/5.0.9.RELEASE/spring-webmvc-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-aop/5.0.9.RELEASE/spring-aop-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-context/5.0.9.RELEASE/spring-context-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-expression/5.0.9.RELEASE/spring-expression-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-core/5.0.9.RELEASE/spring-core-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/springframework/spring-jcl/5.0.9.RELEASE/spring-jcl-5.0.9.RELEASE.jar:/Users/xmly/workspace/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar com.ximalaya.performance.testing.JtlResolver
totalLines:133118
第一行:1542970924059,3,http請求,200,OK,Stepping Thread Group 1-1,text,true,1398,1,1,3
最后一行:1542970985058,1,http請求,200,OK,Stepping Thread Group 1-22,text,true,1398,1,1,1

{"average":"1","endTimeStr":"2018-11-23 19:02:14","errors":"0.00%","kbPerSec":"684.40","max":"21","median":"1","min":"0","samples":"5010","startTimeStr":"2018-11-23 19:02:04","throughput":"501.30","tp90":"2","tp95":"2","tp99":"2"}

{"average":"1","endTimeStr":"2018-11-23 19:02:24","errors":"0.00%","kbPerSec":"736.17","max":"4","median":"1","min":"0","samples":"7602","startTimeStr":"2018-11-23 19:02:14","throughput":"539.23","tp90":"2","tp95":"2","tp99":"2"}

{"average":"1","endTimeStr":"2018-11-23 19:02:34","errors":"0.00%","kbPerSec":"824.10","max":"11","median":"1","min":"0","samples":"9809","startTimeStr":"2018-11-23 19:02:24","throughput":"603.59","tp90":"1","tp95":"2","tp99":"2"}

{"average":"1","endTimeStr":"2018-11-23 19:02:44","errors":"0.00%","kbPerSec":"968.51","max":"11","median":"1","min":"0","samples":"18990","startTimeStr":"2018-11-23 19:02:34","throughput":"709.30","tp90":"1","tp95":"2","tp99":"2"}

{"average":"1","endTimeStr":"2018-11-23 19:02:54","errors":"0.00%","kbPerSec":"1351.61","max":"37","median":"1","min":"0","samples":"38010","startTimeStr":"2018-11-23 19:02:44","throughput":"989.87","tp90":"2","tp95":"2","tp99":"3"}

{"average":"0","endTimeStr":"2018-11-23 19:03:05","errors":"0.00%","kbPerSec":"1677.58","max":"22","median":"1","min":"0","samples":"53702","startTimeStr":"2018-11-23 19:02:54","throughput":"1228.63","tp90":"1","tp95":"1","tp99":"2"}

Process finished with exit code 0

這樣我們就獲得了每種RPS的壓測結(jié)果信息服猪。獲得系統(tǒng)在不同的吞吐量的情況下性能表現(xiàn)供填。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拐云,一起剝皮案震驚了整個濱河市罢猪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叉瘩,老刑警劉巖膳帕,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡危彩,警方通過查閱死者的電腦和手機攒磨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汤徽,“玉大人娩缰,你說我怎么就攤上這事≮烁” “怎么了拼坎?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長完疫。 經(jīng)常有香客問我泰鸡,道長,這世上最難降的妖魔是什么壳鹤? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任盛龄,我火速辦了婚禮,結(jié)果婚禮上芳誓,老公的妹妹穿的比我還像新娘余舶。我一直安慰自己,他們只是感情好锹淌,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布欧芽。 她就那樣靜靜地躺著,像睡著了一般葛圃。 火紅的嫁衣襯著肌膚如雪千扔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天库正,我揣著相機與錄音曲楚,去河邊找鬼。 笑死褥符,一個胖子當著我的面吹牛龙誊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喷楣,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼趟大,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铣焊?” 一聲冷哼從身側(cè)響起逊朽,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曲伊,沒想到半個月后叽讳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年岛蚤,在試婚紗的時候發(fā)現(xiàn)自己被綠了邑狸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涤妒,死狀恐怖单雾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情她紫,我是刑警寧澤铁坎,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站犁苏,受9級特大地震影響硬萍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜围详,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一朴乖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧助赞,春花似錦买羞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至群叶,卻和暖如春吃挑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背街立。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工舶衬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赎离。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓逛犹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梁剔。 傳聞我的和親對象是個殘疾皇子虽画,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容