ActiveMQ中的温度,存储和内存使用百分比

为了有效使用ActiveMQ,了解ActiveMQ如何管理内存和磁盘资源以处理非持久性消息和持久性消息非常重要。

ActiveMQ具有三个关键参数,需要对其进行检查。

参数

  1. 临时使用百分比
    1. 这是已用于假脱机非持久消息的已分配磁盘存储的百分比
    2. 非持久性消息是无法在代理重新启动后幸存的消息
  2. 店铺使用率
    1. 这是已用于存储持久性消息的已分配磁盘空间的百分比
  3. 内存使用率
    1. 这是已用于跟踪目标,高速缓存消息等的代理分配的内存的百分比。此值必须小于-Xmx(最大JVM堆大小)

该博客试图阐明如何计算单个节点ActiveMQ代理实例的存储,温度和内存使用率。 我们使用ActiveMQ版本5.8.0进行此说明。

一旦清楚了ActiveMQ如何操作这些值,就可以使用关键配置设置对ActiveMQ进行微调,以处理以下用例。

  1. 大量目的地(队列/主题)
    • 可以根据需要创建/删除目的地
  2. 缓慢的消费者
    • 当消费者无法跟上消息的生成速度时,这是一个巨大的问题。
  3. 讯息爆发
    • 在短时间内Swift涌入大量具有巨大有效负载大小的消息
  4. 资源利用不当
    • 很少有目的地消耗资源而导致其他人挨饿

扩展策略

如果您想知道ActiveMQ如何水平缩放,请参考Bosanac Dejan创建的幻灯片。 你可以在这里找到

它包含不同的ActiveMQ拓扑,除了调整ActiveMQ的各种参数外,还可以有效地用于满足批量吞吐量。 我发现它非常有用。

让我们直接在...

以下XML代码段来自配置activemq.xml。 为memoryUsage,storeUsage和tempUsage指定的值仅用于讨论目的。

<systemUsage><systemUsage><memoryUsage><memoryUsage limit="256 mb"/></memoryUsage><storeUsage><storeUsage limit="512 mb"/></storeUsage><tempUsage><tempUsage limit="256 mb"/></tempUsage></systemUsage></systemUsage>
  1. 内存使用情况
    1. 代理可使用256MB的JVM内存。 不要与-Xmx参数混淆。
  2. 店铺使用情况:
    1. 这是持久消息使用的磁盘空间(使用KahaDB)
  3. 临时用法:
    1. 假设我们使用默认的KahaDB,这是非持久消息使用的磁盘空间。 ActiveMQ将非持久消息假脱机到磁盘,以防止代理用尽内存

了解临时用法

代理可用性对于消息基础结构至关重要。 因此, 生产者流控制是一种保护机制,可以防止失控的生产者在没有使用者或使用者无法跟上将消息产生到目的地的速率时将非持久消息泵入目的地。 。

让我们以在本地代理实例中将有效负载大小为1MB的非持久消息生成为目标“ foo.bar”为例。

C:\apache-activemq-5.8.0\example>ant producer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -Ddurable=false -DmessageSize=1048576

生产商最终因温度%使用率达到100%而挂起

temp-100
由于消息是非持久性的,因此它们将存储在磁盘上的tmp_storage中

temp_storage
ActiveMQ提供了一种机制,可以调整每个目标的内存使用情况。 在这里,我们对启用了生产者流控制且目标内存限制为100MB的所有队列有一个通用策略(同样,这仅用于说明目的)。

<policyEntry queue=">" optimizedDispatch="true" producerFlowControl="true" cursorMemoryHighWaterMark="30" memoryLimit="100 mb" >

临时使用率计算如下:

(tmp_storage文件夹的大小/临时使​​用的内存限制)* 100

因此,在我们的情况下:

265,025,856 /(256 * 1024 * 1024)* 100 = 99.8〜100%,如经纪人控制台中所示。

以下日志消息显示在activemq.log中

INFO | Usage(default:temp:queue://foo.bar:temp) percentUsage=99%, usage=268535808, limit=268435456, percentUsageMinDelta=1%;Parent:Usage(default:temp
) percentUsage=100%, usage=268535808, limit=268435456, percentUsageMinDelta=1%: Temp Store is Full (99% of 268435456). Stopping producer (ID:AKUNTAMU-
1-61270-1388528939599-1:1:1:1) to prevent flooding queue://foo.bar. See http://activemq.apache.org/producer-flow-control.html for more info (blockingfor: 1421s)

让我们再举一个例子……

请考虑以下系统使用情况配置。 我们将tempUsage减少到50MB,同时保留了相同的目的地级别策略。

<systemUsage><systemUsage><memoryUsage><memoryUsage limit="256 mb"/></memoryUsage><storeUsage><storeUsage limit="512 mb"/></storeUsage><tempUsage><tempUsage limit="50 mb"/></tempUsage></systemUsage></systemUsage>

在这种情况下,我们发现临时使用率增加到191%

temp-191

temp_storage停止增长到接近96MB,并且生产者挂起。

temp_storage-191

临时使用率是191%,因为(95.5MB / 50 MB)* 100,其中95.5 MB是文件夹的大小,50MB是临时使用的限制。

目标的限制为100MB,因此temp_storage不会超过目标。 造成这种混乱的原因是,临时使用限制小于每个目标内存限制。

店铺使用情况

让我们对持久消息重复相同的测试。

系统使用情况配置如下:

<systemUsage><systemUsage><memoryUsage><memoryUsage limit="256 mb"/></memoryUsage><storeUsage><storeUsage limit="512 mb"/></storeUsage><tempUsage><tempUsage limit="256 mb"/></tempUsage></systemUsage></systemUsage>

每个目标策略如下:

<policyEntry queue=">" optimizedDispatch="true" producerFlowControl="true" cursorMemoryHighWaterMark="30" memoryLimit="100 mb" >

让我们将1MB持久消息生成到名为“ foo.bar”的队列中

C:\apache-activemq-5.8.0\example>ant producer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -Ddurable=true -DmessageSize=1048576

生产者在512条消息后挂起

以下日志语句出现在代理日志文件中

INFO | Usage(default:store:queue://foo.bar:store) percentUsage=99%, usage=537210471, limit=536870912, percentUsageMinDelta=1%;Parent:Usage(default:st
ore) percentUsage=100%, usage=537210471, limit=536870912,percentUsageMinDelta=1%: Persistent store is Full, 100% of 536870912. Stopping producer (ID: AKUNTAMU-1-31754-1388571228628-1:1:1:1) to prevent flooding queue://foo.bar. See http://activemq.apache.org/producer-flow-control.html for more info (
blocking for: 155s)

经纪人商店的使用率为100%,如下所示。

商店100

由于消息是持久性的,因此需要将它们保存到文件系统中。 商店使用限制为512MB。

存储磁盘100

上面的屏幕快照显示了kahadb文件夹,其中持久消息为543 MB(消息和其他数据库相关文件为512MB)

内存使用情况

在上面的示例中,内存使用率为11。

根据目标策略,每个目标分配的内存为100MB,cursorMemoryHighWaterMark
指定为30。因此100MB的30%为30MB。 因此,除了将消息存储在KahaDB中之外,还使用30MB将消息存储在内存中以进行更快的处理。 。

内存使用限制配置为256MB。 所以30MB是256的11%

(30/256)* 100〜11%

因此,如果要有9个这样的队列发生类似的情况,那么我们将耗尽11%* 9 = 99%〜100%的代理内存使用量

内存使用率是代理用于存储消息的内存量。 很多时候,这可能会成为瓶颈,因为一旦这个空间已满,经纪人将使生产者停滞不前。 在快速处理和有效的内存管理之间需要权衡取舍。

如果我们在内存中保留更多消息,则处理速度更快。 但是,内存消耗将非常高。 相反,如果消息保留在磁盘上,则处理将变慢。

结论

我们在此博客中看到了ActiveMQ中存储,临时和内存使用情况的工作方式。 无法为每个目标配置存储和临时使用的百分比,而内存使用的百分比则可能是因为cursorMemoryHighWaterMark。
希望您发现此信息有用。 此处给出的示例仅用于说明目的,并不意味着可以投入生产。 您将需要进行适当的容量规划,并确定代理拓扑以实现最佳配置。 如有任何意见,请随时与我们联系!

资源资源

  • http://blog.raulkr.net/2012/08/demystifying-producer-flow-control-and.html
  • http://tmielke.blogspot.com/2011/02/observations-on-activemqs-temp-storage.html
  • http://activemq.apache.org/javalangoutofmemory.html
  • http://www.slideshare.net/dejanb/advanced-messaging-with-apache-activemq -Bosanac Dejan
  • http://www.pepperdust.org/?p=150
  • http://stackoverflow.com/questions/2361541/how-do-you-scale-your-activemq-vertical

翻译自: https://www.javacodegeeks.com/2014/04/temp-store-and-memory-percent-usage-in-activemq.html

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

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

相关文章

Python 爬虫之 Scrapy 分布式原理以及部署

Scrapy分布式原理 关于Scrapy工作流程 Scrapy单机架构 上图的架构其实就是一种单机架构&#xff0c;只在本机维护一个爬取队列&#xff0c;Scheduler进行调度&#xff0c;而要实现多态服务器共同爬取数据关键就是共享爬取队列。 分布式架构 我将上图进行再次更改 这里重要的就是…

【解决】ERROR in xxx.js from UglifyJs

当我们运行打包脚本 npm run build或者打包ios weexpack build ios有可能会遇到以下报错ERROR in index.js from UglifyJs![](https://img2018.cnblogs.com/blog/1504257/201811/1504257-20181102141127347-447538002.png) 这是因为webpack在打包vue文件时没有成功转换ES6的语法…

linux 给文件添加用户名和密码是什么格式,linux成批添加用户的命令

当我们遇到教学这类情况时我们需要批量添加学生用户&#xff0c;纳闷怎么才能做到成批添加用户呢?下面由学习啦小编为大家整理了linux成批添加用户命令的相关知识&#xff0c;希望大家喜欢!linux批量添加用户命令——newuserslinux批量添加用户流程&#xff1a;批量添中用户流…

JS线程与事件循环解析

JS是单线程&#xff0c;JS代码从上到下依次执行&#xff0c;但是单线程有一个非常大的问题&#xff0c;遇到耗时的任务&#xff0c;后面的任务只能等待它执行完&#xff0c;才能接着执行。比如ajax请求&#xff0c;从服务器上获取数据&#xff0c;本身是耗时的&#xff0c;如果…

Apache Camel中的断路器模式

骆驼通常在分布式环境中用于访问远程资源。 远程服务可能由于各种原因和期间而失败。 对于短时间后暂时不可用且可恢复的服务&#xff0c;重试策略可能会有所帮助。 但是某些服务可能会失败或挂起更长时间&#xff0c;从而使调用应用程序无响应且速度缓慢。 防止级联故障和关键…

深入学习决策树算法原理

分类技术&#xff08;或分类法&#xff09;是一种根据输入数据建立分类模型的系统方法&#xff0c;分类法的例子包括决策分类法&#xff0c;基于规则的分类法&#xff0c;神经网络&#xff0c;支持向量机和朴素贝叶斯分类法。这些技术都使用一种学习算法&#xff08;learning a…

HTML 页面自动刷新

学习就是一个不断积累的过程&#xff0c;每一天能够学到一点新东西说明自己就在进步&#xff01;&#xff01; HTML head 里面设置页面自动刷新功能 <meta http-equiv"Refresh" content"2"> <meta http-equiv"X-UA-Compatible" cont…

linux 编译安装python,linux下编译安装python2.7.6

安装依赖开发包yum install readline-develyum install *argparse*wget https://www.python.org/ftp/python/2.7.6/Python2.7.6.tgzipython 下载地址https://github.com/ipython/ipython/releases/download/rel-2.1.0/ipython-2.1.0.tar.gz编译安装python 2.7.6[[email protec…

kotlin访问控制符可见性

名称访问权限public&#xff08;默认&#xff09;该权限符修饰的成员可以在任何地方被访问internal该权限符修饰的成员可以在该类的内部或者文件的内部或者同一个模块内被访问protected该权限符修饰的成员可以在该类的内部或者文件的内部或者其子类中被访问private该权限符修饰…

JDK 8中方便的新地图默认方法

Map接口在JDK 8中提供了一些方便的新方法 。 因为我在本文中介绍的Map方法是作为默认方法实现的&#xff0c;所以Map接口的所有现有实现都享有默认方法中定义的默认行为&#xff0c;而无需任何新代码。 这篇文章中介绍的JDK 8引入的Map方法是getOrDefault&#xff08;Object&am…

JS观察者模式-自定义事件

111转载于:https://www.cnblogs.com/zoeeying/p/10139131.html

linux中下载的服务压缩包存放在,linux 下tomcat6 配置为服务

本人从官网http://tomcat.apache.org/上面下载的6.0.1_31版本&#xff0c;并解压包后改名存放在&#xff1a;/usr/share/tomcat6本人使用的是root用户登录&#xff0c;下面就说说具体的操作步骤&#xff0c;1、在/usr/share/tomcat6/bin中有commons-daemon-native.tar.gz压缩包…

Java 8 Friday Goodies:精益并发

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 &#xff0c;现在我们觉得是时候开始一个新的博客系列了…

Floyd最短路(带路径输出)

摘要(以下内容来自百度) Floyd算法又称为插点法&#xff0c;是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法&#xff0c;与Dijkstra算法类似。 该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名。 简介编辑 在…

CSS 小结笔记之清除浮动

浮动是一个非常好用的属性&#xff0c;但是有时会出现一些问题&#xff0c;需要进行清除浮动。例如 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

jsp分割字符串并遍历

1、先引入JSTL库 <% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c"%> 2、分割字符串并遍历&#xff08;按“,”分割&#xff09; <c:forTokens items"${danger.imagesPath}" delims"," var"file"> …

linux shell 脚本 父子进程 等待子进程,SHELL父子进程分析

导言本节将就shell交互(脚本执行)过程中涉及子进程(subprocess)以及子SHELL(subshell)的部分&#xff0c;配以实例&#xff0c;进行说明。将详细讨论如下问题&#xff1a;subprocess和subshell是什么subprocess的产生过程是什么什么情况下会产生subprocess和subshellshell编程中…

百里香Spring测试的意见

我最近将其转换为thymeleaf &#xff0c;以便在基于Spring的Web应用程序中进行视图模板化&#xff0c;而不是jsp。 百里香叶文档中所有关于为什么百叶香叶在jsp上为何能保持水分的争论都被我肯定了。 除了能够预览模板之外&#xff0c;对我来说&#xff0c;主要原因之一是视图…

路由与交换--交换机常用配置及其实验案例

1 交换机常用配置命令 1.1 配置主机名与口令 Switch>enable Switch#config t Switch(config)#hostname SA SA(config)#enable password cisco&#xff08;明文&#xff09; SA(config)#enable secret cisco&#xff08;暗文&#xff09; SA(config)#exit SA#show running-co…

js使用工具将表单封装成json字符串传到后台,js截取字符串(学生笔记)

<script src"js/jquery.min.js"></script><script src"https://cdn.bootcss.com/jquery.serializeJSON/2.9.0/jquery.serializejson.js"></script><script>// / //原始版本// $("#1").click(function(){// …