activemq 性能测试_ActiveMQ性能测试

activemq 性能测试

我们使用ActiveMQ作为消息传递层–发送大量需要低延迟的消息。 通常它可以正常工作,但是在某些情况下我们已经看到性能问题。 在花了太多时间测试我们的基础结构之后,我想我已经学到了有关ActiveMQ的一些有趣的东西:它可能真的很慢。

尽管一般来说,消息通过ActiveMQ传输不会出现问题,但是我们注意到,当我们收到大量消息时,就会开始看到延迟。 好像我们正在达到某个消息速率限制–当我们超过该消息速率限制时,消息将被延迟,仅在该限制处传递。 从ActiveMQ贴上消息的时间戳起,我们可以看到代理正在快速接受消息,但是发送给使用者的时间有所延迟。

我设置了一个测试工具来复制问题,这很容易。 但是,我在测试系统中测得的吞吐量似乎很低:每秒2500条消息。 对于一个非常简单的消费者而言,基本上什么也不做,因此没有理由将吞吐量如此之低。 为了进行比较,在完全相同的设置中使用定制的消息传递层,我们达到了每秒15,000条消息。 第二个难题是在生产中,我们看到的消息速率仅为250消息/秒。 为什么测试系统比生产系统快10倍?

我开始尝试消除可能性:

  • ActiveMQ上的并发负载没有区别
  • 更改生产者流量控制设置没有影响
  • 更改使用者的预取限制只会使行为变得更糟(我们将数据写入非持久性主题,因此默认的预取限制很高)
  • 似乎没有组件受到带宽或CPU限制

作为实验,我尝试将使用者与代理人和生产者移动到同一台服务器上:消息吞吐量增加了一倍。 将使用者移动到具有更高ping时间的服务器上:消息吞吐量骤降。

这导致了一个洞察力:ActiveMQ代理的行为恰好好像“一次”发送给消费者的数据量受到限制。 我特别意识到,网络上未确认的数据量似乎受到限制。 如果连线较长,则数据到达使用者的时间更长,而确认返回的时间也更长:因此,代理每秒发送的数据更少。

ActiveMQ

这种行为突出了我们的第一个错误。 我们使用Spring Integration处理用户端的消息路由,在一年前对Spring进行了升级,我们在该版本中获得的更改之一是更改了消息驱动通道适配器确认JMS消息的方式。 以前我们的消息是自动确认的,但是现在确认模式是“事务处理”的。 这意味着我们必须在将确认发送给代理之前完成整个消息处理链。

这就解释了为什么生产系统(对消息有用的工作)具有比测试系统低得多的数据速率。 不仅是消息必须经过1毫秒的ping时间,消费者还没有发送完确认消息,直到消费者完成了对消息的处理,这可能还要花费几毫秒的时间。

但是更糟糕的是,交易确认似乎完全阻止了用户预取数据! 我们通过事务处理确认所看到的吞吐量是一次在线上一个未确认的消息。 如果我们将消费者移到更远的地方,我们的吞吐量将直线下降。 即,代理在收到之前的确认之前不会发送新消息。 与其代替消费者从经纪人那里预取数百条消息并依次处理它们,而是经纪人耐心地一次发送一条消息! 难怪我们的表现糟透了。

通过spring集成配置更改可以轻松解决此问题。 在测试系统中,我们的消息吞吐量从2500消息/秒增加到10,000消息/秒。 不错的进步。

但是我很好奇,我们仍然看到经纪人的行为,好像网上未确认数据的数量受到限制吗? 因此,我将使用者移动到相距较远的服务器上进行测试。 结果? 是! 代理仍然限制网络上未确认的数据量。 即使自动确认了消息,对于经纪人将不会看到确认而发送的数据量也有一个硬性上限。

帽子的大小呢? 约64KB。 是的,在2018年,我的消息传递层一次只能传输64KB的数据。 当经纪人和消费者超级亲密时,这很好。 但是,将消费者与代理之间的ping时间增加到10ms,我们的消息速率将下降到5,000消息/秒。 在100毫秒的往返行程中,我们的消息速率为500消息/秒。

这种行为感觉就像应该控制预取限制:但是,我们看到的消息(不超过60条1kB消息)比预取限制所暗示的要少得多。 到目前为止,我还没有找到有关“消费者窗口大小”是否存在的任何确认。 也没有任何特别修改行为的方法。 使用方上TCP套接字缓冲区大小的增加将传输中的数据量增加到大约80KB,但没有增加。

我很困惑,很多人使用ActiveMQ,并且肯定有人会注意到像这样的数据上限吗? 但是,也许大多数人使用ActiveMQ时,消费者和经纪人之间的ping时间非常短,根本就不会注意到它?

但是,人们必须在全球分布式部署中使用ActiveMQ –为什么没人能看到这一点?

翻译自: https://www.javacodegeeks.com/2018/09/activemq-performance-testing.html

activemq 性能测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS for MacOS如何设置自动拼写检查

在顶部菜单栏,点击【文件】–>【文字偏好设置】或者点击左上角的【文件】–>【文字偏好设置】:

jdk8 bug_JDK Bug系统浪费时间

jdk8 bug当我在OpenJDK jdk-dev邮件列表中看到Jesper Wilhelmsson的消息标题“ Introducing time浪费者 ”时,我想到了该消息的可能内容的几种可能性。 在阅读该链接与单击链接后出现消息之间的第二个左右时间内 ,我想知道消息是否与以下主题之一有关&am…

角度和弧度的计算关系

一、角的两种单位 “ 弧度”和“度”是度量角大小的两种不同的单位。就像“米”和“市尺”是度量长度大小的两种不同的单位一样。 二、弧度的定义 角(弧度)=弧长/半径 圆的周长是半径的 2π倍,所以一个周角(360度&a…

关键字搜索

1.1.1 需求分析 在首页或搜索页输入关键字,点击搜索 显示列表搜索结果: 1.1.2实现思路 (1)后端使用匹配查询和布尔查询 (2)前端向后端传递map(因为提交的不仅仅是关键字,还有品牌…

java中线程死锁及避免_如何避免Java线程中的死锁?

java中线程死锁及避免如何避免Java中的死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题。 尽管问题看起来很基础,但是一旦您开始深入研究,大多数Java开发…

MySQL查询数据字典_存储过程_函数_视图元数据_表元数据_触发器

文章目录一、查询所有的存储过程二、查询某个数据库下的存储过程三、查询所有的函数四、查询某个数据库下的函数五、查看存储过程详情六、查看函数详情七、查看存储过程的创建源码八、查看函数的创建源码九、查看视图元数据十、查看表元数据十一、查看触发器一、查询所有的存储…

关键字高亮查询

1.1.1 需求分析 所谓高亮,就是使用特别的样式修饰某字段中包含的搜索关键字。 需求:实现搜索高亮,商品名称使用红色显示搜索关键字。 1.1.2实现思路 使用默认高亮显示来获取每个搜索命中title字段的高亮显示,在指定title字段的…

jep和jsr_JEP 342:JVM和幽灵

jep和jsrJEP 342 (“限制推测执行”)已从“ 草稿 ”状态转换为“ 候选 ”状态,但尚未针对特定的JDK版本(请参见图形以了解JEP流程中的步骤 )。 Jesper Wilhelmsson 写道 , JEP 342 “涵盖了使用新的C 编译器…

执行SQL脚本文件

文章目录一、登录数据库后,执行命令 source二、未登录数据库,执行命令 mysql一、登录数据库后,执行命令 source mysql> source /root/test/test.sql;二、未登录数据库,执行命令 mysql [roothtlwk0001host ~]# mysql -uroot -…

linux使jdk开机可用_JDK 11的一般可用性

linux使jdk开机可用按计划,这是今天宣布的是JDK 11被释放的通用性 。 本周初,Iris Clark宣布了“ JSR 384(Java SE 11)最终发行版 ”,并且在同一封邮件中引用了JSR 384的最终发行版,并引用了“ Java SE 11&…

实现搜索分页功能

1.1 需求分析 实现搜索分页功能,每页显示30条记录。实现商品列表下方分页栏。 1.2 实现思路 前端向后端传递参数 pageNo (页码) 1.3 代码实现 修改SearchServiceImpl的search方法,在第1段代码中添加代码 package com.changg…

MySQL的set names命令详解

执行下面的命令: mysql> set names charset_name;相当于执行了下面三条命令语句: mysql> SET character_set_client charset_name; mysql> SET character_set_results charset_name; mysql> SET character_set_connection charset_name…

aws ec2 跨帐号共享_AWS共享资源的警告

aws ec2 跨帐号共享最近,我一直在发布一个新版本,与往常一样,通过将DNS记录切换为指向以前的“备用”组的负载平衡器来利用蓝绿色部署 。 但是在切换DNS之前,我检查了新发布版本的日志并发现了一些奇怪的现象– Web框架&#xff0…

MySQL数据库模式_SQL模式

文章目录查看 MySQL 当前的 SQL 模式设置 MySQL 的 SQL 模式SQL 模式介绍TRADITIONAL(传统模式)STRICT(严格模式)ANSI 模式MySQL 服务器可以以不同的 SQL 模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程…

spring http缓存_HTTP缓存与Spring示例

spring http缓存缓存是HTTP协议的强大功能,但由于某些原因,它主要用于静态资源,例如图像,CSS样式表或JavaScript文件。 但是,HTTP缓存不仅限于应用程序的资产,因为您还可以将其用于动态计算的资源。 只需少…

分类列表查询

1 需求分析 以关键字作为查询条件,查询结果中包含的商品分类,在页面中显示出来 2 实现思路 (1)商品分类列表的显示使用聚合查询 (2)使用过滤查询 3 代码实现 修改SearchServiceImpl的search方法&…

用户微服务-用户注册 发送短信验证码

1 需求分析 注册账号,用手机号注册,填写后发送短信验证码, 填写短信验证码正确方可注册成功。 2 实现思路 1)用户微服务生成6位的短信验证码,存入redis (以code_手机号为key),再发…

jdk 流合并_JDK 12,合并的收集器和命名的挑战

jdk 流合并看来可能是一种新的方法,将可在java.util.streams.Collectors类JDK 12即会,根据新方法的提出了基于Javadoc的文档,“返回一个收藏家是将输入的元素两个规定的收藏家并将其结果与指定的合并功能合并。” 目前 ,此新Colle…

MySQL配置变量log-bin,重启数据库服务失败

在配置文件 /etc/my.cnf 添加变量 log-bin: log-bin/var/lib/mysql/mybinlog/mysql-bin重启数据库服务报错: [roothtlwk0001host lib]# systemctl start mysqld.service Job for mysqld.service failed because the control process exited with error…

javafx 调用java_Java,JavaFX的流畅设计风格滑块

javafx 调用javaJMetro的Java,JavaFX主题版本刚刚提高到4.2版。 此版本为Slider控件带来了新样式。 除此之外,您现在还可以看到一个弹出窗口,向您显示滑块的当前值。 新滑块样式 以下是旧的JMetro Slider样式: 滑块OLD JMetro灯…