关键特征:
1、可靠性(一般通过消息持久化实现,可持久化到磁盘、数据库等,没有持久化的可靠性如何保证)
2、优先级(0-9,这个是JMS的规范)
3、节点间组网(分布式特性,实现消息跨节点路由)
4、消息模型(PTP || Pub/Sub,这个是JMS的规范)
性能指标:
4、高吞吐量
5、低延迟
1、AMQ是完全遵循JMS1.1规范的;有多种协议支持:openwire(nio)、stomp、mqtt、amqp
2、Moquette不遵循JMS1.1规范,实现了MQTT协议,能做到高吞吐量和低延迟==>注意:moquette是基于Netty实现的,其是一个客户端/服务器端模式,因此其不支持节点间组网。
3、Kafka
>>>MQ性能指标测试http://x-aeon.com/wp/2013/04/10/a-quick-message-queue-benchmark-activemq-rabbitmq-hornetq-qpid-apollo/
>>>影响性能的因素有以下:
1.the network topology
2.transport protocols used
3.quality of service
4.hardware, network, JVM and operating system
5.number of producers, number of consumers
6.distribution of messages across destinations along with message size
1、使用的网络拓扑和技术(网络环境:卫星、专网、广域网、个域网);
2、使用的传输协议:opwenwire、stomp、amqp、mqtt;
3、服务质量(处理消息的超时时间、使用topic还是queue、消息是否持久化<某些场景允许消息可丢>);
4、硬件、网络(网卡百兆还是千兆),JVM和操作系统;
5、生产者数量、消费者数量;
6、要分发到目标的消息大小;
提示:对于1-2K的消息,单个topic,1个生产者和1个消费者,21000--22000/sec
>>>不能单说某个MQ性能最快,而要聚焦到具体的应用场景,而且每个MQ不同版本也有区别,
建议用较新版本的。
>>>为什么影响MQ性能的因素和消费者的数量有关系?==>
例如:对于队列的预取值,如果队列只有一个消费者时,预取值可以稍大些,但是当队列有多个消费者时,预取值尽量小点,设置为1最好。
因为:有多个消费者时,慢的消费者会在它所在的客户端累积消息,而其他快的消费者又消费不了这些消息,导致MQ整体的吞吐量下降。
/////////////////////begin////////////
To evaluate the performance of a broker correctly you should ask yourself the following questions:
1.Do I need a broker for financial transactions or online games?
2.What is more important for the use: guaranteed transactional service or speed and bandwidth?
3.How big may be the delay in delivery of messages?
4.What size are the messages to be transmitted?
5.How many queues are needed?
6.How many clients simultaneously access the broker?
为了正确评估Broker的性能,你应该问下你自己以下几个问题:
1.你所用的Broker是用于金融交易还是在线游戏?==>MQ用在什么地方?
2.使用中更看重哪项指标:保证交易服务还是速度和带宽?==>关心什么指标
3.消息分发需要有多大的延迟?==>服务质量
4.要传输的消息大小是多少?==>消息大小
5.需要多少个队列?==>队列个数
6.有多少个客户端同时访问Broker?==>并发客户端个数
/////////////////////end//////////////
///////begin/////////
Practical experience:
Usually not the brokers is the bottleneck, but message consumer that are slowed down by slow backend systems or database queries.
实际经验告诉我们:
通常,Broker不是瓶颈,而消息的消费者成为了瓶颈,由于后端系统或者数据库查询导致消费者慢下来。
///////end////////////
>>>JMeter测试方式
>>JMeter实测及调优:
性能和环境因素的关系:如:网络状况、磁盘IO等有较大关系
LevelDB没有像官网上说的那样,比KahaDB性能高(使用LevelDB同样的配置,对带宽的利用率没有KahaDB高)
>> 环境:
>> 调优要点:
1、传输通道采用nio模式,即:nio://0.0.0.0:61617,客户端采用failover方式,如:failover:(tcp://10.88.112.165:61617)
2、队列分发策略调优参数:
2.1:optimizedDispatch="true"
2.2:lazyDispatch="false"
2.3:producerFlowControl="true"
2.4:<fileQueueCursor/>
2.5:useCache="true"
2.6:queuePrefetch="1" or queuePrefetch="0"
2.7:memoryLimit="128MB"
3、JVM参数:
-Xms1024M -Xmx1024M -Xmn256M -Xss228K -Dcom.rf.emq.UseDedicatedTaskRunner=false -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError
4、OS:
4.1:ulimit -n 65535
4.2:采用磁盘的异步写IO,要求MQserver实现真正的异步IO调用才可以。(JDK1.7已经支持异步IO,即NIO2.0)
>> 监控方法:
1、查看tcp连接数及是否稳定:
1.1、netstat -an|grep '61617' |grep 'ESTABLISHED' |wc -l
1.2、netstat -an|grep '61617' |grep 'CLOSE_WAIT' |wc -l
2、查看文件句柄数:
lsof -p <pid> |wc -l
3、查看MQ server资源使用情况:memory、cpu
top -p <pid>
>>结论:
1、在该环境下,消息大小为1KB时,最大吞吐量为4250个/sec,最大并发在3000个连接数(客户端)。
2、每个连接会对应三个线程:
2.1:EMQ Connection Dispatcher: tcp://10.88.112.165:42079
2.2:Timer-*
2.3:EMQ NIO Worker *
3、在并发500客户端时达到最大吞吐量,JVM线程保持在1500以下, JVM线程数大概为并发连接数的3倍左右。
注意:并发500时线程数为1426个,并发520个时,达到1470个线程,并发480时,达到1384个线程;
4、在500个客户端并发连接(JVM线程达快达到1500时),对网络带宽的利用率基本保持在95%以上,偶尔100%。
Tip:通过Apollo测试磁盘IO效率,如下:
>>windows环境调整:
1、线程模型
2、TCP MTU:
分享到:
相关推荐
【MQ相关资料 内容齐全】 本文将详细探讨MQ(Message Queuing)技术,包括其入门知识、集群架构、开发实践以及简明手册中的关键概念。MQ是一种中间件技术,用于在分布式系统中异步传输消息,提高了系统的可靠性和可...
MQ 相关介绍 PPT MQ 相关介绍 PPT 是关于 IBM WebSphere MQ 的概念和对象的详细介绍,涵盖了 JMS 使用和发布/订阅的实现,同时也涉及到 ActiveMQ 的介绍。本文将详细地解释 WebSphere MQ 的概念、对象和实现机制。 ...
### MQ相关常见问题集锦(FRQ)详细解析 #### 1. 如何确定发送通道是否可以和对方服务器的接收方通道连通? - **解答**:为了验证发送通道能否与接收方通道建立连接,可以通过MQ提供的通道PING功能来进行检测。PING...
在本“IBM_MQ下载”中,我们关注的是IBM MQ相关的Java应用程序开发所需的基础库。 描述中的“IBM webSphere Mq应用jar包集合”是指IBM MQ提供的Java开发包,这些JAR文件包含了开发和运行与MQ交互的Java应用程序所需...
5. **headers-7.5.jar**: 此文件可能包含了IBM MQ相关的头文件和元数据,用于解析和生成消息格式。 6. **pcf-7.5.jar**: PCF(Program Control Facility)是IBM MQ的命令框架,允许程序通过API来执行MQ命令,如查询...
这份“IBM MQ错误代码大全中英文对照覆盖所有MQ出现的错误”文档集合了MQ可能遇到的各种错误代码,对于理解和解决MQ相关问题非常关键。 错误代码通常由三位数字组成,如2035、MQRC_NOT_AUTHORIZED等。每个错误代码...
6. **故障排查与性能优化**:学习如何诊断MQ相关的问题,以及如何调整MQ配置以提高性能和可扩展性。 7. **安全设置**:理解MQ的安全机制,如用户权限、认证和加密,以及如何设置安全策略。 8. **高可用性与集群**...
**MQ相关文档** 本文将深入探讨MQ(Message Queuing)技术,主要基于提供的文档资源,包括《MQ常见问题汇总.pdf》、《MQ错误码.txt》、《MQ学习.chm》、《Websphere MQ API.chm》以及《WebSphere MQ管理指南.chm》...
在Java环境中使用IBM MQ时,需要导入特定的JAR包来支持MQ相关的功能。在这个“IBM MQ全部JAR包”的压缩文件中,包含了进行JAVA开发时与MQ交互所需的关键库。 首先,我们来看一下描述中提到的“JAVA发送文本内容至MQ...
至于压缩包中的“mq相关jar包”,很可能包含了以下组件: 1. IBM MQ的JMS客户端库:如com.ibm.mq.allclient.jar,提供与MQ服务器交互的API。 2. Spring对IBM MQ的支持:如spring-jms.jar,包含了Spring对JMS的抽象和...
操作ibm mq用到的jar包,包括com.ibm.mqjms.jar,com.ibm.mqetclient.jar,com.ibm.mq.soap.jar,com.ibm.mq.jms.Nojndi.jar,com.ibm.mq.jar,com.ibm.mq.fta.jar,aspectjrt.jar
8. **all70pdf**:这个名字可能表示一个包含70个PDF文档的集合,这可能是一系列IBM MQ相关的教程、白皮书或案例研究的集合,提供更广泛的知识点覆盖。 通过学习这些资料,读者可以系统性地了解和掌握IBM MQ,包括其...
7. **故障排查(Problem Determination)**: MQ Explorer提供日志查看和错误分析功能,帮助快速定位和解决MQ相关问题。 8. **队列共享组(Queue Sharing Groups)**: 这一特性允许多个队列管理器共享同一组队列,...
需要引用MQ相关的JAR包,这些JAR包通常位于安装目录的`java\lib`子目录下。在遇到问题时,例如找不到JNI库“mqjbnd”,可以通过重命名dll文件解决;如果遇到消息队列已满的情况,需清空队列或者更换队列;当队列访问...
总的来说,"ibmmq所需jar包.rar" 是一个完整的IBM MQ Java开发环境,包含了开发、调试和运行IBM MQ相关Java应用程序所需的所有库。在实际项目中,只需将这些JAR添加到项目的类路径中,就可以方便地进行IBM MQ的消息...
2. **环境变量**:需要设置MQ相关的环境变量,如MQ_HOME、MQ_CLASSPATH等。 3. **服务注册**:将队列管理器作为Windows服务进行注册,以便在系统启动时自动运行。 **应用开发和API使用:** 1. **编程接口**:提供了...
1. **缩短联调时间**:这款工具的核心目标之一就是帮助测试人员减少与MQ相关的联调时间。通常,系统间的联调可能因为各种原因而变得复杂和耗时,此工具通过简化操作流程,使得测试过程更加迅速。 2. **解决无法联调...
总的来说,这个压缩包提供了一个全面的MQ学习资源,从基础概念到高级应用,再到问题解决,对于希望在IT领域从事MQ相关工作的个人来说,是一份非常宝贵的资料。学习者可以通过这些材料逐步深入,从理解MQ的基础工作...
在Java应用中,需要适当地处理MQ相关的异常,如`MQException`。同时,确保在不再需要时关闭`Connection`和`Session`,避免资源泄露。 7. **多线程与并发**: 在实际应用中,生产者和消费者可能需要在多线程环境中...