Activemq性能优化

生产者流量限制

ActiveMQ支持为每个生产者单独设置流量控制。流量控制的含义:当生产者产生消息过快,超过流量限制的时候,生产者将会被阻塞直到资源可以继续使用,或者抛出一个JMSException

同步发送消息(useAsynSend为false)和异步发送消息时(useAsynSend为true),流量控制实现的方式不一样的。

参考:https://activemq.apache.org/producer-flow-control

issue:

2023-07-25 08:22:57,687 | WARN  | Usage Manager Memory Limit (751619277) reached on queue://quality_inspection_detail_append, size 900148. Producers will be throttled to the rate at which messages are removed from this destination to prevent flooding it. See http://activemq.apache.org/producer-flow-control.html for more info. | org.apache.activemq.broker.region.Queue | ActiveMQ Transport: tcp:///10.233.84.53:49990@61616

同步发送流控设置

同步发送消息:此时将在SystemUsage的限制下,使用destinationPolicy中的policyEntry来实现流量控制。

<destinationPolicy><policyMap><policyEntries><policyEntry queue="Foo" producerFlowControl="true"memoryLimit="1mb">   <pendingQueuePolicy><vmQueueCursor/></pendingQueuePolicy></policyEntry></policyEntries></policyMap>
</destinationPolicy>

限制队列Foo的最大内存为1M,当使用内存达到1M时,该生产者将直接被阻塞至有空余的内存时才会继续发送消息。
也可以在systemUsage上设置sendFailIfNoSpace="true"sendFailIfNoSpaceAfterTimeout="3000"来控制客户端的异常和等待时间。

异步发送流控设置

异步发送消息:由于不阻塞生产者,可以通过connctionFactory.setProducerWindowSize(1024000)来控制broker确认收到消息前生产者能发送的最大数据量。

Usage(default:memory:queue://Consumer.AppOne.VirtualTopic.Process.Incoming:memory) percentUsage=100%, usage=1048828, limit=1048576, percentUsageMinDelta=1%;Parent:Usage(default:memory) percentUsage=0%, usage=4414167, limit=1073741824, percentUsageMinDelta=1%: Usage Manager Memory Limit reached. Producer (ID:hostname-22563-1396035238078-1:1:2:1) stopped to prevent flooding queue://Consumer.AppOne.VirtualTopic.Process.Incoming. See http://activemq.apache.org/producer-flow-control.html for more info (blocking for: 301s)

参考:https://www.sourceallies.com/2014/10/activemq-memory-tuning

附录

参考

shell参数:https://activemq.apache.org/unix-shell-script.html

memory tuning:https://www.sourceallies.com/2014/10/activemq-memory-tuning

生产者流量控制:https://activemq.apache.org/producer-flow-control

资源限制

 <systemUsage sendFailIfNoSpace="true" sendFailIfNoSpaceAfterTimeout="30000"><memoryUsage><memoryUsage percentOfJvmHeap="70" /></memoryUsage><storeUsage><storeUsage limit="100 gb"/></storeUsage><tempUsage><tempUsage limit="50 gb"/></tempUsage></systemUsage>

systemUsage属性:

  • sendFailIfNoSpace:空间不足,而导致不确定的阻塞send()方法的一种替代方案,就是将其配置成客户端抛出的一个异常。
  • sendFailIfNoSpaceAfterTimeout:导致send()方法失败,并在客户端抛出异常,但仅当等待了指定时间之后才触发。单位是毫秒。

memoryUsage可以设置为:

  • percentOfJvmHeap:表示使用“百分数值”进行设置。
  • limit:指定值。limit=”1000 mb”

tempUsagenon persistent时的消息存储空间。消息进入mq后,首先会占用memoryUsagepersistent模式下,消息总是会被另外存储于指定介质(默认KahaDB),如果non persistent,当消息占用内存量超过memoryUsage的70%(默认值,可调整),则消息会被交换到临时区域(如果默认FileCursor,则会以文件形式存储于磁盘空间),这个交换过程会很慢,所以如果这种情况频繁存在,设置PFC很有必要了。如果消息的消费能力有限,tempUsage可以设置大一些,不然很容易出现tempusage超限情况。还有一点要注意,tempusage不能小于32m,而且最好还要大于memoryUsage,不然对于情况1,转存单个文件默认大小32M,写文件还未完成tempusage已经超限了,情况2也可能会出现内存的消息还未完全交换到temp区,tempusage已经超限的情况。

镜像启动参数(since 1.17.3)

/entrypoint.sh

  • ACTIVEMQ_USERNAME:用户名,替换conf/credentials.propertiesactivemq.username=system
  • ACTIVEMQ_PASSWORD:密码,替换conf/credentials.propertiesactivemq.password=manager
  • ACTIVEMQ_WEBADMIN_USERNAME:Web Admin,替换conf/jetty-realm.propertiesadmin: admin, admin
  • ACTIVEMQ_WEBADMIN_PASSWORD:Web Admin,替换conf/jetty-realm.propertiesadmin: admin, admin

${ACTIVEMQ_CONFIG}/bin/activemq

  • ACTIVEMQ_OPTS_MEMORY:内存设置。
  • ACTIVEMQ_OPTS:如果未设置,则使用ACTIVEMQ_OPTS_MEMORY的内存设置,并增加参数“-Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config”。
  • ACTIVEMQ_DEBUG_OPTS:调试参数。
  • ACTIVEMQ_SUNJMX_START:JMX参数
  • ACTIVEMQ_SSL_OPTS:SSL参数

参数配置:

  • /etc/default/activemq
  • $HOME/.activemqrc
  • $ACTIVEMQ_HOME/bin/env

后面的优先级高

env中支持的从docker外部配置的环境变量:

  • ACTIVEMQ_OPTS_MEMORY
  • ACTIVEMQ_OPTS
  • ACTIVEMQ_OUT
  • ACTIVEMQ_QUEUEMANAGERURL
  • ACTIVEMQ_SSL_OPTS
  • ACTIVEMQ_DEBUG_OPTS
  • ACTIVEMQ_KILL_MAXSECONDS
if [ -z "$ACTIVEMQ_OPTS_MEMORY" ] ; thenACTIVEMQ_OPTS_MEMORY="-Xms64M -Xmx1G"
fi
if [ -z "$ACTIVEMQ_OPTS" ] ; thenACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.conf
fiif [ -z "$ACTIVEMQ_OUT" ]; thenACTIVEMQ_OUT="/dev/null"
fi# Specify the queue manager URL for using "browse" option of sysv initscript
if [ -z "$ACTIVEMQ_QUEUEMANAGERURL" ]; thenACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616"
fi
# Set additional JSE arguments
if [ -z "$ACTIVEMQ_SSL_OPTS" ] ; then#ACTIVEMQ_SSL_OPTS="-Djava.security.properties=$ACTIVEMQ_CONF/java.security"ACTIVEMQ_SSL_OPTS=""
fi
# Uncomment to enable remote debugging
#ACTIVEMQ_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"if [ -z "$ACTIVEMQ_KILL_MAXSECONDS" ]; thenACTIVEMQ_KILL_MAXSECONDS=30
fi

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

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

相关文章

力扣:509. 斐波那契数(动态规划,附带递归版本) 详细讲解动态规划的思路

题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中…

速盾cdn:cdn加速原理是什么

CDN&#xff08;内容分发网络&#xff09;通过在全球各地部署服务器节点来加速内容传输&#xff0c;提高用户访问网站时的响应速度和性能。速盾CDN作为一种CDN服务提供商&#xff0c;其加速原理主要涉及以下几个关键步骤&#xff1a; 内容缓存&#xff1a; 当用户访问一个网站时…

【Spring实战】12 Thymeleaf

文章目录 1. 定义2. 设计目标3. 官网4. Spring 集成 Thymeleaf1&#xff09;添加依赖2&#xff09;创建模版3&#xff09;创建Controller4&#xff09;启动程序5&#xff09;执行验证 5. 代码详细总结 1. 定义 Thymeleaf 是一个用于在 Web 应用程序中进行服务器端 Java 模板渲…

Git:远程仓库的使用

查看当前的远程库 要查看当前配置有哪些远程仓库&#xff0c;可以用git remote 命令&#xff0c;它会列出每个远程库的简短名字。在克隆完某个项目后&#xff0c;至少可以看到一个名为origin 的远程库&#xff0c;Git 默认使用这个名字来标识你所克隆的原始仓库&#xff1a; 也…

UE4运用C++和框架开发坦克大战教程笔记(十三)(第40~42集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十三&#xff09;&#xff08;第40~42集&#xff09; 40. 多按键绑定41. 自动生成对象42. 资源模块数据结构测试自动生成对象按资源类型生成对象 40. 多按键绑定 上节课实现了按键绑定系统的 4 种基础绑定&#xff0c;这节课来…

自动化部署与容器化:构建现代化DevOps工作流

流畅DevOps之路&#xff1a;探秘自动化部署和容器化的前沿技术 前言 随着软件开发的复杂性不断增加&#xff0c;传统的手动部署和管理方式已无法满足迅速变化的需求。本文将探讨现代DevOps实践中的关键技术&#xff0c;从容器化到自动化部署&#xff0c;以及涉及到的关键工具…

python+django高校教材共享管理系统PyCharm 项目

本中原工学院教材共享平台采用的数据库是mysql&#xff0c;使用nodejs技术开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。系统所要实现的功能分析&#xff0c;对于现在网络方便的管理&…

Java:IO流——字节流和字符流

目录 IO流的基本概念 IO流体系结构 FileOutputStream字节输出流 构造方法 成员方法 细节 关流 FileInputStream字节输入流 构造方法及成员方法 read不带参数代码示例 read带参数代码示例​编辑 将字节数组或字符数组转成字符串 FileReader 字符输入流 构造方法和…

云计算的服务模式和发展趋势

一、云计算的三种服务模式&#xff1a; 1、Iaas&#xff08;infrastructure as a service&#xff09;: 基础设施即服务&#xff08;基础的云主机、磁盘、系统等&#xff0c;云厂商都给配置好&#xff0c;需要自己搭建云平台&#xff0c;并在云平台上部署业务所需要的软件&…

在macOS中搭建.NET MAUI开发环境

文章目录 准备安装扩展安装 .NET安装工作负载安装 Xcode 命令行工具调试安卓应用安装 JDK安装 Android SDK 安装 Android 模拟器安装模拟器安装镜像创建虚拟机 同意许可条款创建 MAUI 项目调试 MAUI 应用切换调试目标 参考资料 准备 一台 macOS Monterey 以上的电脑安装 XCode…

前端如何性能优化

前端性能优化是提升网页加载速度和用户体验的关键方面 压缩和合并文件&#xff1a;压缩 CSS 和 JavaScript 文件&#xff0c;减少文件大小。将多个文件合并为一个&#xff0c;减少网络请求次数。 使用缓存&#xff1a;设置合适的缓存策略&#xff0c;使得静态资源可以被浏览器…

分类模型评估方法

1.数据集划分 1.1 为什么要划分数据集? 思考&#xff1a;我们有以下场景&#xff1a; 将所有的数据都作为训练数据&#xff0c;训练出一个模型直接上线预测 每当得到一个新的数据&#xff0c;则计算新数据到训练数据的距离&#xff0c;预测得到新数据的类别 存在问题&…

番茄台式电脑装机日记

番茄台式电脑装机日记 start 时至今日&#xff0c;终于圆了年少时的梦&#xff1a;拥有自己的一台台式电脑。就好像第一次学会系鞋带&#xff0c;第一次剥榴莲&#xff0c;亲手组装自己的第一台台式电脑&#xff0c;这个体验完全是此生少有且独特的完美体验。作者&#xff1a…

Innodb执行insert造成死锁的问题

背景 起因是线上报了一个错误信息&#xff0c;Deadlock found when trying to get lock; try restarting transaction&#xff0c;这是Mysql检测到死锁后&#xff0c;自动回滚了事务引发的异常。spring框架里打印了异常堆栈&#xff0c;所以很快就定位到哪一行代码出了问题。 …

optimizer.load_state_dict()报错parameter group不匹配的问题的原因

在加载预训练权重时可能会遇到类似下面的错误&#xff1a; optimizer.load_state_dict(checkpoint[optimizer_state]) File "/opt/conda/lib/python3.8/site-packages/torch/optim/optimizer.py", line 145, in load_state_dict raise ValueError("loade…

Visual Studio Markdown Editor 插件导出 HTML

Visual Studio Markdown Editor 可通过右键弹出菜单选择“另存为”&#xff0c;轻松导出HTML文件或是单一的mhtml文件。然而&#xff0c;这个插件在导出HTML文件时有一个小问题&#xff0c;就是md文件中的一些内部链接无法在导出的HTML文件中正常工作。 其中的原因是&#xff…

Docker单点部署Seata(2.0.0) + Nacos(v2.3.0) + Mysql(5.7)

文章目录 一、部署Nacos二、部署Mysql三、Seata准备工作1. 记住nacos、mysql、宿主机的ip2. 建立数据库3. Nacos远程配置文件 四、部署Seata五、初步检验Seata部署情况六、微服务使用Seata1.引入依赖2. application.yml配置 七、遇到的坑1. Nacos显示Seata服务的ip为容器内网ip…

使用SpringBoot AOP记录操作日志和异常日志

使用SpringBoot AOP记录操作日志和异常日志 平时我们在做项目时经常需要对一些重要功能操作记录日志&#xff0c;方便以后跟踪是谁在操作此功能&#xff1b;我们在操作某些功 能时也有可能会发生异常&#xff0c;但是每次发生异常要定位原因我们都要到服务器去查询日志才能找…

第3课 获取并播放音频流

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 FFmpeg作为一套庞大的音视频处理开源工具&#xff0c;其源码有太多值得研究的地方。但对于大多数初学者而言&#xff0c;如何快速利用相关的API写出自己想要的东西才是迫切需要…

【机器学习】卷积神经网络(一)

一、网络结构 典型CNN结构 卷积神经网络是一种能够从图像、声音或其他类型的数据中学习特征的人工智能模型。你可以把它想象成一个有很多层的过滤器&#xff0c;每一层都能够提取出数据中的一些有用的信息&#xff0c;比如边缘、形状、颜色、纹理等。这些信息可以帮助卷积神经网…