jmeter 压测工具和心得

  1. 部署jmeter pod
    1. 下载jmeter的yaml文件:
      apiVersion: v1
      kind: Namespace
      metadata:
        name: jmeter-load
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: demo-load-service
        namespace: jmeter-load
        labels:
          app: demo-load
      spec:
        type: ClusterIP
        ports:
          - port: 22000
            targetPort: 22000
            protocol: TCP
        selector:
          app: demo-load
      ---
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: demo-load-deploy
        namespace: jmeter-load
        labels:
          app: demo-load
      spec:
        replicas: 1
        serviceName: demo-load-deploy
        selector:
          matchLabels:
            app: demo-load
        template:
          metadata:
            labels:
              app: demo-load
          spec:
            containers:
              - name: jmeter-load-load
                image: ck06060512/jmeter:jmeter5.4
                imagePullPolicy: IfNotPresent
                command: ["/bin/sh"]
                args: ["-c", " sleep 9000000"]
                resources:
                  limits:
                    memory: 2048Mi
                    cpu: 2048m
       
    2. 默认是安装在namespace: jmeter-load下
    3. 启动jmeter pod 命令: kubectl apply -f XXX.yaml
    4. 查看启动的pod:  kubectl  -n jmeter-load get pods
    5. 进入jmeter pod容器: kubectl -n jmeter-load exec -it demo-load-deploy-0 /bin/bash
       
  2. 注意事项:
    1. jmx文件位置: /jmeter-5.4/0loadTestJMX
    2. 执行压测时需要在目录 /jmeter-5.4下

部署jmeter,请参考前一章节,本章节主要介绍部署成功后,如何执行jmeter脚本

 

一、jmeter 的镜像里面包含POST和GET2种请求类型的脚本,脚本查看命令如下:

  1. ps:jmeter启动的pod的namesapce为:jmeter-load
  2. 进入jmeter的容器demo-load-deploy-0 命令:kubectl -n jmeter-load exec -it demo-load-deploy-0 /bin/bash
  3. 容器类执行:cd /jmeter-5.4/0loadTestJMX
  4. 容器类执行:ls *.jmx
  5. jmeter文件:1-1GetForEverThread.jmx
    1. 该文件是用于 循环次数为 forever 的请求,通过不断增加thread的数目来增加获得最大的TPS
    2. 传参说明:

      NO.

      参数

      对应Jmeter字段

      实例

      备注

      1-JthreadsNumber Jmeter之 Number of Threads-JthreadsNumber=5请求的线程数目,必填
      2-JrampupPeriodJmeter之Ramp-up Period-JrampupPeriodn=1决定多长时间启动所有线程
      3-JserverIPJmeter之ServerName-JserverIP=10.0.0.31请求的host,必填
      4-JserverPort jmeter之Port Number-JserverPort=10902请求的端口号, 没有则不写
      5-JPathJmeter之Path-JPath='/api/v1/query'请求的URL,必填
      6-JParameters Jmeter之Parameters Name-JParameters=query请求的参数key, 没有则不写
      7-JparametersValueJmeter之Parameters Value-JParameters=query -JparametersValue='metrics0&dedup=true'请求的参数value, 没有则不写
    3. 运行例子:

      1. 请求的接口为:
        curl 'http://10.0.0.31:10902/api/v1/query?query=metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112'
      2. 压测的调用方式为:
        ./bin/jmeter -JthreadsNumber=5   -JrampupPeriodn=1 -JserverIP=10.0.0.31 -JserverPort=10902 -JParameters=query  -JPath='/api/v1/query' -JParameters=query -JparametersValue='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/1-1GetForEverThread.jmx
         
  6. jmeter文件:1-3GetLimitQPSStepLoad.jmx
    1. 改脚本主要是针对已经知道最大TPS后,限制TPS后运行,持续压测一段时间查看cpu,内存的各项指标的情况
    2. 传参说明:

      NO.

      参数

      对应Jmeter字段

      实例

      备注

      1-JTotalGroupJmeter之 group will start-JTotalGroup=10这次的测试总共会起10个线程
      2-JFirstWaitJmeter之 Then,wait for-JFirstWait=0等待0s后开始起线程,也就是不等待直接起线程
      3-JThenGroupJmeter之 Then start-JThirdGroup=0从0个线程开始持续增加
      4-JThirdGroupJmeter之 Nex,add-JThirdGroup=2每增加2个线程后会运行3s,再起余下的2个线程,再运行3s,以此类推
      5-JeverySecondJmeter之 Threads every XXX seconds-JeverySecond=3每增加2个线程后会运行3s
      6 -JramUpJmeter之 using ramp-up-JramUp=6前面每起2个线程的时候花6s,运行3s,然后再再6s内再起2个线程,再运行3s,以此类推
      7-JHoldLoadJmeter之 then hold for-JHoldLoad=300全部的线程起来后,运行30s 后开始停止
      8-JserverIPJmeter之ServerName-JserverIP=10.0.0.31请求的host,必填
      9-JserverPort jmeter之Port Number-JserverPort=10902请求的端口号, 没有则不写
      10-JQPjmete之 target throughput timer-JQPS=90000 (此单位为m,即TPS限制为1500)限定QPS(单位是m)
      11-JPathJmeter之Path-JPath='/api/v1/query'请求的URL,必填
      12-JParameters Jmeter之Parameters Name-JParameters=query请求的参数key, 没有则不写
      13-JparametersValueJmeter之Parameters Value-JParameters=query -JparametersValue='metrics0&dedup=true'请求的参数value, 没有则不写
    3. 图例
      uploading.4e448015.gif转存失败重新上传取消
       
    4. 运行例子:
      1. 最大TPS为:1500/s
      2. 请求接口为:
        curl 'http://10.0.0.31:10902/api/v1/query?query=metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112'
      3. 压测的调用方式为:
        ./bin/jmeter -JTotalGroup=20 -JFirstWait=1 -JThenGroup=0 -JThirdGroup=10 -JramUp=1 -JHoldLoad=300 -JserverIP=10.0.0.31 -JserverPort=10902 -JQPS=90000 -JParameters=query  -JPath='/api/v1/query' -JParameters=query -JparametersValue='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/1-3GetLimitQPSStepLoad.jmx
         
  7. jmeter文件:1-2GetStepLoad.jmx 
    1. 不限制QPS持续持续运行一段时间看各个性能指标
    2. 所有参数跟上述一致,没有-JQPS
  8. jmeter文件:2-1PostForEverThread.jmx
    1. 该文件是用于 循环次数为 forever 的请求,通过不断增加thread的数目来增加获得最大的TPS
    2. 传参说明:

      NO.

      参数

      对应Jmeter字段

      实例

      备注

      1-JthreadsNumber Jmeter之 Number of Threads-JthreadsNumber=5请求的线程数目,必填
      2-JrampupPeriodJmeter之Ramp-up Period-JrampupPeriodn=1决定多长时间启动所有线程
      3-JserverIPJmeter之ServerName-JserverIP=10.0.0.31请求的host,必填
      4-JserverPort jmeter之Port Number-JserverPort=10902请求的端口号, 没有则不写
      5-JPathJmeter之Path-JPath='/api/v1/query'请求的URL,必填
      6-JBodyDataJmeter之Body Data-J-JBodyData='XXXXX'请求的参数BODY
    3. 运行例子:

      1. 请求的接口为:
        curl -X POST -d '{metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112}'  'http://10.0.0.31:10902/api/v1/query'
      2. 压测的调用方式为:
        ./bin/jmeter -JthreadsNumber=5   -JrampupPeriodn=1 -JserverIP=10.0.0.31 -JserverPort=10902 -JParameters=query  -JPath='/api/v1/query'  -JBodyData='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/2-1PostForEverThread.jmx
         
  9. jmeter文件:1-3PostLimitQPSStepLoad.jmx
    1. 改脚本主要是针对已经知道最大TPS后,限制TPS后运行,持续压测一段时间查看cpu,内存的各项指标的情况
    2. 传参说明:

      NO.

      参数

      对应Jmeter字段

      实例

      备注

      1-JTotalGroupJmeter之 group will start-JTotalGroup=10这次的测试总共会起10个线程
      2-JFirstWaitJmeter之 Then,wait for-JFirstWait=0等待0s后开始起线程,也就是不等待直接起线程
      3-JThenGroupJmeter之 Then start-JThirdGroup=0从0个线程开始持续增加
      4-JThirdGroupJmeter之 Nex,add-JThirdGroup=2每增加2个线程后会运行3s,再起余下的2个线程,再运行3s,以此类推
      5-JeverySecondJmeter之 Threads every XXX seconds-JeverySecond=3每增加2个线程后会运行3s
      6 -JramUpJmeter之 using ramp-up-JramUp=6前面每起2个线程的时候花6s,运行3s,然后再再6s内再起2个线程,再运行3s,以此类推
      7-JHoldLoadJmeter之 then hold for-JHoldLoad=300全部的线程起来后,运行30s 后开始停止
      8-JserverIPJmeter之ServerName-JserverIP=10.0.0.31请求的host,必填
      9-JserverPort jmeter之Port Number-JserverPort=10902请求的端口号, 没有则不写
      10-JQPjmete之 target throughput timer-JQPS=90000 (此单位为m,即TPS限制为1500)限定QPS(单位是m)
      11-JPathJmeter之Path-JPath='/api/v1/query'请求的URL,必填
      12-JBodyDataJmeter之Body Data-J-JBodyData='XXXXX'请求的参数BODY
    3. 图例
      uploading.4e448015.gif转存失败重新上传取消
       
    4. 运行例子:
      1. 最大TPS为:1500/s
      2. 请求接口为:
        curl -X POST -d '{metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112}'  'http://10.0.0.31:10902/api/v1/query'
      3. 压测的调用方式为:
        ./bin/jmeter -JTotalGroup=20 -JFirstWait=1 -JThenGroup=0 -JThirdGroup=10 -JramUp=1 -JHoldLoad=300 -JserverIP=10.0.0.31 -JserverPort=10902 -JQPS=90000 -JParameters=query  -JPath='/api/v1/query' -JBodyDatas='metrics0%7Blabel1%3D%22m%3A0%3A1%3A0%22%2Clabel2%3D%22m%3A0%3A2%3A0%22%2Clabel3%3D%22m%3A0%3A3%3A9%22%7D&dedup=true&partial_response=true&start=1607581398.668&end=1607602998.668&step=86&max_source_resolution=0s&_=1607506959112' -n -t 0loadTestJMX/2-3PostLimitQPSStepLoad.jmx
         
  10. jmeter文件:1-2PostStepLoad.jmx 
    1. 不限制QPS持续持续运行一段时间看各个性能指标
    2. 所有参数跟上述一致,没有-JQPS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值