分布式压测

需求场景

一些关键接口需要压测到很高的QPS
需要设置更多的线程去模拟虚拟用户去请求接口
假如需要模拟2万个用户
因为jemeter使用java语言开发
每创建一个线程
jvm默认会为每个线程分配1M的堆栈内存空间
那么就需要20G内存
一般压测机器是4核8G或8核16G
因此需要更多台机器共同完成施压请求

分布式压测示意图

meter分布式测试环境中有两个角色:Master和Slaves1、Master节点:向参与的Slaves节点发送测试脚本,并聚合Agent节点的执行结果,部署一台2、Slaves节点:接收并执行Master节点发送过来的测试脚本,并将执行结果返回给Master,可部署多台

安装slave节点

docker pull runcare/jmeter-slavedocker run -it -d --name slave01 runcare/jmeter-slave
docker run -it -d --name slave02 runcare/jmeter-slave
docker run -it -d --name slave03 runcare/jmeter-slave

准备测试脚本

test.jmx

查看slave机器的IP

docker inspect -f '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $(docker ps -q)

启动master docker并执行测试脚本

存放test.jmx脚本的目录

/Users/mengfanxiao/Documents/stream/jemeter/jmx/

命令

result=`date +"%Y%m%d%H%M%S"` && docker run --rm -v /Users/mengfanxiao/Documents/stream/jemeter/jmx/:/data runcare/jmeter-master jmeter -n -t /data/test.jmx -l /data/$result.jtl -j /data/$result.log -e -o /data/$result -R 172.17.0.6,172.17.0.7,172.17.0.8

或者

docker run --rm -v $(pwd):/data runcare/jmeter-master jmeter -n -t /data/test.jmx -l /data/result.jtl -j /data/result.log  -R 172.17.0.6,172.17.0.7,172.17.0.8

结果文件

生产的结果文件,日志文件和报表文件在脚本文件test.jmx同一目录下如果压测脚本中使用到了csv数据源文件,需要提前复制到Slaves的/data目录下

注意事项

  • master和slaves需要在同一个网段
如果mac电脑Master使用安装在mac电脑中的Jmeter
Slaves使用Docker中的Slaves
需要在启动Slaves时将端口映射出来docker run -it -d -p 1099:1099 -p 60001:60001 runcare/jmeter-slave

  • 执行Master发送脚本时也需要指定server.hostname和server.rmi.localport
进入test.jmx所在目录result=`date +"%Y%m%d%H%M%S"` && jmeter -n -t test.jmx -l $result.jtl -j $result.log -e -o $result -Djava.rmi.server.hostname=30.208.47.45 -Dserver.rmi.localport=60002 -Dserver_port=1098

Dockerfile源码

https://gitee.com/pingfanrenbiji/resource/tree/master/%E5%88%86%E5%B8%83%E5%BC%8Fjemeter

Jeecgboot微服务Feign

示例

服务jeecg-cloud-system 调用 jeecg-cloud-demo

jeecg-cloud-demo 服务接口

  • 接口
  • 实现类
  • 服务接口

jeecg-cloud-system编写feign客户端

方式一 feign客户端

  • 启动类加上@EnableFeignClients
  • 编写feign客户端
  • 编写测试方法

方式二 动态feign客户端

  • 启动类 @EnableFeignClients

同上

  • 编写feign接口调用

同上

  • 编写测试方法
参数一表示feign接口类
参数二表示类名称

feign原理

  • 架构图
  • feign扫包和注册细节
  • FeignClientFactoryBean 解析
  • 代理的实现过程
  • 代理invoke的实际执行过程

xxl-job定时任务集成

引入依赖

客户端demo编写

修改 jeecg-dev.yaml 配置文件

  • 开启 xxljob 并 修改 xxljob-admin的服务连接配置
  • 启动xxl-job服务

数据库脚本

https://gitee.com/pingfanrenbiji/jeecg-boot/blob/1e3a4d6a6f53589a3cd53fd18c62bf4375467447/jeecg-boot/jeecg-cloud-module/jeecg-cloud-xxljob/doc/db/tables_xxl_job.sql

配置邮箱通知

开启邮箱服务并生成授权码

设置IMAP服务的SSL加密方式

https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=331

启动服务

界面访问

http://localhost:9080/xxl-job-admin
admin
123456

  • 创建定时任务

新增执行器

新增定时任务

测试定时任务

查看执行日志

java模拟数据库压测_Jeecgboot Feign、分布式压测、分布式任务调度相关推荐

  1. java模拟数据库压测_java应用的优化【转】

    XX银行网银系统是一套全新的对公业务渠道类系统,经过两年的建设,将逐步对外提供服务. 该系统融合了原来多个对公渠道系统,并发量是以前多个系统之和,吞吐量要求将大幅上升.为了使广大对公客户使用系统时获得 ...

  2. java模拟数据库压测_Jmeter压测工具使用总结

    1.常用测试工具对比 1.loadrunner 性能稳定,压测结果及细粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多 2.apache ab(单接口压测最方便) 模拟多线程并发请求,ab ...

  3. java模拟数据库压测_java模拟数据库缓存

    实现缓存一些数据到本地,避免重复查询数据库,对数据库造成压力,代码如下: package threadLock; import java.util.HashMap; import java.util. ...

  4. java模拟数据库压测_写并发压测 java 脚本你必须会的 3 个类

    性能测试做到后面,一些特殊的场景利用常用的现成工具满足不了需求,所以你需要学习java写一些特定协议的压测脚本,那你不得不研究多线程或线程池,而此时你也一定会遇到java并发编程中的几个类,今天重点讲 ...

  5. Jeecgboot Feign、分布式压测、分布式任务调度

    分布式压测 需求场景 一些关键接口需要压测到很高的QPS需要设置更多的线程去模拟虚拟用户去请求接口假如需要模拟2万个用户因为jemeter使用java语言开发每创建一个线程jvm默认会为每个线程分配1 ...

  6. 分布式压测系列之Jmeter4.0第一季

    1)Jmeter4.0介绍 jmeter是个纯java编写的开源压测工具,apache旗下的开源软件,一开始是设计为web测试的软件,由于发展迅猛,现在可以压测许多协议比如:http.https.so ...

  7. 分布式压测系列之Jmeter4.0

    1)Jmeter4.0介绍 jmeter是个纯java编写的开源压测工具,apache旗下的开源软件,一开始是设计为web测试的软件,由于发展迅猛,现在可以压测许多协议比如:http.https.so ...

  8. 性能测试搭建Jmeter分布式压测与监控

    对于运维工程师来说,需要对自己维护的服务器性能瓶颈了如指掌,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题:如果当前架构快达到性能瓶颈了,是横向扩容性能提升大 ...

  9. 搭建 Apache Jmeter 分布式压测与监控

    1.前言 对于运维工程师来说,需要对自己维护的服务器性能瓶颈了如指掌,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题:如果当前架构快达到性能瓶颈了,是横向扩容 ...

最新文章

  1. 大角度人脸转正--Towards Large-Pose Face Frontalization in the Wild
  2. Hello World社团冬季招新暨杭电Umis项目人才招募程序设计竞赛
  3. Boss直聘Python爬虫实战
  4. 【Shiro第九篇】SpringBoot + Shiro整合JWT
  5. bgr to rgb
  6. GeoServer发布shp数据
  7. 中小型企业无线网络设计
  8. 手机字体 html代码大全,移动端html5如何定义字体
  9. mongodb for mac安装
  10. WordPress实现点击标签云中的某一标签,就展示出此标签下的所有文章
  11. HTML强制关机,如何强制关机【处置技巧】
  12. Designing Network Design Spaces
  13. 快递查询单号查询,分享简单好用查询技巧
  14. 机器人中的DIY,成就满满!
  15. 必备技能06:UML类图要素及解析
  16. systemd的日志存在哪里?
  17. 保姆式RecyclerView下拉刷新、上拉加载更多Kotlin
  18. 鼠标滑轮控制Div水平滚动
  19. mysql5.5手册读书日记(4)
  20. MODBUS通信系列之数据处理

热门文章

  1. Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)
  2. LVM逻辑卷管理基本概念及原理
  3. 2012年回忆录及2013年目标设立
  4. InstallShield 2008 终止声明 (EOL)对最终客户意味着什么
  5. 创业,“玩”的就是心态
  6. Greenplum segment级问题的排查 - gp_session_role=utility (含csvlog日志格式解读)
  7. Docker CE for CentOS的安装(对官方文档的翻译)
  8. Vue.js 2 入门与提高(一)
  9. Visual Studio 2013 Xamarin for iOS 环境搭建
  10. PHP中两种包含文件方式、三种注释风格、四种标记风格