前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(七)使用Jmeter压测Dubbo

(七)使用Jmeter压测Dubbo

作者头像
HaC
发布2022-01-06 13:59:42
5460
发布2022-01-06 13:59:42
举报
文章被收录于专栏:HaC的技术专栏HaC的技术专栏

压测思路:

压测consumer的Controller,调用provider暴露的接口。

provider做1w次循环,生成随机数做累加。

provider再把consumer的入参无处理返回给consumer。

1、准备

使用的工具:

1、gc可视化工具:https://gceasy.io

2、压测工具:jmeter5.1(其他版本不兼容dubbo)

3、jmeter 插件,在jmeter官网可以找到,主要用来获取响应时间、TPS 参数

4、ServerAgent插件,jmeter的官方监测工具,用于收集服务器的CPU、磁盘、带宽、内存 参数。

5、jmeter集成dubbo插件,可以直接使用dubbo:// 协议调用 provider

序列化:

dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json

使用 jmeter 官方自带的 servergent 收集服务器信息:

代码语言:javascript
复制
[root@GZSB-CJB-SHH10-8-LASTMILE-32 ServerAgent-2.2.3]# ./startAgent.sh 
INFO    2021-11-25 14:06:18.483 [kg.apc.p] (): Binding UDP to 4444
INFO    2021-11-25 14:06:19.490 [kg.apc.p] (): Binding TCP to 4444
INFO    2021-11-25 14:06:19.497 [kg.apc.p] (): JP@GC Agent v2.2.3 started

consumer代码:

代码语言:javascript
复制
   @DubboReference(version = "*", protocol = "dubbo,hessian", loadbalance = "random",retries = 0)
   private StressTestService stressTestService;
    
   @RequestMapping("/stressTest/string1k")
    public Boolean string1k(){
        // IO操作读取1k数据
        String s = new FileCapacity().getFileCapacity(1*1024);
        String result = stressTestService.StressString1k(s);
        log.info("stressTest/string1k:{},num:{}",result.length(),a);
        return true;
    }

2、Jmeter压测情况

环境:

provider:

代码语言:javascript
复制
jdk:1.8

2h4g

CentOS release 6.4 (Final)
model name      : QEMU Virtual CPU version 2.5+
stepping        : 3
cpu MHz         : 2099.998
cache size      : 4096 KB

宿主机带宽 :

代码语言:javascript
复制
1G 

jvm参数:

代码语言:javascript
复制
-server -Xmx2g -Xms2g -Xmn256m -Xss256k -XX:+UseG1GC 
-Xloggc:/data/dubboStress/logs/dubbo_gc_thrift.log -XX:+PrintGC -XX
:+PrintGCDetails

jmeter参数:

代码语言:javascript
复制
20个并发线程1s内发出,持续 10分钟

需要提前设置一些收集的参数:

cpu、内存、磁盘IO、networkIO需通过 servergent 进行收集。

本次试验是不以压满provider为目标,只是单纯测试 10分钟的情况。

均采取 dubbo2.7.13+hessian2 ,压测10分钟,20并发,结果如下:

1K

100K

样本(请求数)

1298522

79450

TPS

2164.2 ,1min到瓶颈

132.4 ;

响应时间比例

90% 10ms;95% 11ms 99% 18ms,avg 8ms

90% 213ms;95% 227ms ;99% 288ms

CPU

服务器 CPU:32%,内存 : 21.6 %

%CPU 26.0 ; %MEM 16.5

IO

NetWork

2 800 000

1 200 000

吞吐量

gc

1 sec 62 ms

490 ms

windows执行可能会遇到 Adress bind already use ,因为windows的端口回收比较慢,样本大的时候无法及时提供端口,因为jmeter每一个线程都需要开启一个socket端口和consumer通讯,需要自行修改注册表修改。

可以看到 100k 数据的时候,dubbo的响应时间很慢、tps也低。

consumer ping provider 延迟差不多是7ms 同机房延迟是 0.2ms

provider 在 1k 和 100k 的top:

  • 1k
代码语言:javascript
复制
Tasks: 118 total,   1 running, 117 sleeping,   0 stopped,   0 zombie
Cpu0  : 23.6%us, 16.7%sy,  0.0%ni, 57.6%id,  0.3%wa,  0.0%hi,  1.7%si,  0.0%st
Cpu1  :  5.0%us,  7.7%sy,  0.0%ni, 87.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924680k total,  3201900k used,   722780k free,   318184k buffers
Swap:  2097144k total,       64k used,  2097080k free,  1186712k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                       
19560 root      20   0 3834m 826m  13m S 33.3 21.6   0:43.04 java    
  • 100k
代码语言:javascript
复制
top - 09:49:23 up 528 days, 17:07,  4 users,  load average: 0.16, 0.29, 0.21
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu0  : 16.1%us,  2.1%sy,  0.0%ni, 80.7%id,  0.0%wa,  0.0%hi,  1.1%si,  0.0%st
Cpu1  :  8.1%us,  1.3%sy,  0.0%ni, 90.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3924680k total,  2971000k used,   953680k free,   320012k buffers
Swap:  2097144k total,       64k used,  2097080k free,  1185236k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                       
29635 root      20   0 4713m 632m  12m S 26.0 16.5   3:49.77 java

3、总结

以上仅仅对consumer调用,而再发起对provider的调用,而非直接使用dubbo协议直接调用provider。测试了一下,两者区别较大,毕竟前者多了一层consumer,如图:

(上述用的是思路一,思路二需要自行安装dubbo插件)

但思路一和使用 ab 测试结果差别不大,而且jmeter还可以生成很多图表,各位可以尝试一下。

参考:

源码已上传到github:https://github.com/DogerRain/dubbo-samples-test

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、准备
  • 2、Jmeter压测情况
  • 3、总结
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档