jmeter之——jms压测(activemq)

jmeter 是通过 jndi 来获得 jms 中相关对象的,如 ConnectionFactory 和 Destination,所以在 jmeter 的 classpath 中需要添加一个 jndi.properties 属性文件,用于配置jndi。 创建jndi.properties文件,包含如下内容:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory  
java.naming.provider.url = tcp://10.153.134.176:61616
#指定connectionFactory的jndi名字,多个名字之间可以逗号分隔。  
#以下为例:  
#对于topic,使用(TopicConnectionFactory)context.lookup("connectionFactry")  
#对于queue,(QueueConnectionFactory)context.lookup("connectionFactory")  
connectionFactoryNames = connectionFactory  
  
#注册queue,格式:  
#queue.[jndiName] = [physicalName]  
#使用时:(Queue)context.lookup("jndiName"),此处是MyQueue  
queue.MyQueue = ActiveMQ.headLine.syncEntity.queue.dev  
  
#注册topic,格式:  
# topic.[jndiName] = [physicalName]  
#使用时:(Topic)context.lookup("jndiName"),此处是MyTopic  
topic.MyTopic = ActiveMQ.Advisory.Consumer.Topic.cacheupdate  

1、把jndi.properties放到jmeter的启动jar包中:

可以直接将jndi.properties文件拖入jar包中;也可以执行如下操作,打开命令行窗口,并定位到 JMETER_HOME/bin 目录,运行如下命令 :

jar uf ApacheJMeter.jar jndi.properties


2、添加activemq-all-5.2.0.jar包到Jmeter的lib库:
将ACTIVE_HOME/activemq-all-5.2.0.jar文件复制到JMETER_HOME/lib目录中,jmeter在测试jms的时候会使用到activemq提供的jms的实现类,这些类并没有随jmeter一起分发,需要把这些类添加到jmeter的classpath中。


3、启动Jmeter测试JMS:
添加线程组及JMS的sampler,有三种方式的JMS消息:

1)Point-to-Point

右键》添加》sampler》JMS point-to-point 添加一个队列的界面


注:如果不写Receive queue,则不会有消费者。


2)Publisher
基本值同Point-to-Point,不同点在于Destination,填写JMS的topic目的地
若在ActiveMQ中Topics的名字为example.MyTopic
则jndi.properties文件中定义的topic如下:
topic.MyTopic = example.MyTopic
则Destination填写topic.后面的MyTopic


3)Subscriber
基本值同Publisher,不同在于可以根据需要填写Client ID,JMS Selector进行消息过滤



参考:

http://www.open-open.com/lib/view/open1425649397165.html

activemq -jndi:

http://activemq.apache.org/jndi-support.html

<think>好的,我现在需要帮助用户解决如何对ActiveMQ进行JMS试的问题。首先,我得理清楚用户的需求。用户提到了试的方法、工具和最佳实践,所以我的回答需要覆盖这三个方面。 首先,我应该回忆一下ActiveMQ的相关知识。ActiveMQ是一个消息中间件,支持JMS规范,常用于异步通信和解耦应用。试通常是为了评估系统在高负载下的性能表现,比如吞吐量、延迟、稳定性等。用户可能希望确保他们的ActiveMQ部署在高并发情况下仍能可靠运行。 接下来,关于方法部分。试的基本步骤通常包括确定试目标、准备试环境、设计试场景、执行试、监控与分析结果。针对ActiveMQ,可能需要特别关注消息生产者和消费者的数量、消息大小、持久化设置等。比如,是否需要试持久化消息与非持久化消息的不同表现,或者不同的持久化存储配置(如KahaDB或LevelDB)对性能的影响。此外,消息确认模式(如自动确认或客户端确认)也会影响性能,需要纳入试范围。 然后是工具选择。常用的JMS工具JMeterActiveMQ自带的性能工具,以及像Tsung这样的分布式工具JMeter可以通过JMS Point-to-Point或JMS Publisher/Subscriber采样器来模拟消息的发送和接收。需要指导用户如何配置JMeter的线程组、消息内容、目标队列或主题等。另外,ActiveMQ本身提供了PerfTest工具,可以快速生成生产者和消费者进行试。对于大规模试,Tsung可能更适合,因为它支持分布式负载生成,能够模拟更多并发用户。 最佳实践方面,应该包括逐步增加负载、监控关键指标、调整配置优化性能、使用持久化时的磁盘性能优化等。比如,用户可能需要调整ActiveMQ的内存配置,如设置适当的最大内存限制,或者配置持久化存储参数,如journalDiskSyncInterval来平衡性能和数据一致性。此外,试环境的隔离也很重要,确保试结果不受其他因素干扰。 另外,需要引用用户提供的参考内容。引用[3]提到了KahaDB的配置,其中journalDiskSyncStrategy和journalDiskSyncInterval的设置会影响持久化性能。在试持久化消息时,用户可能需要调整这些参数,观察对吞吐量和延迟的影响。引用[2]提到ActiveMQ用于多种场景,所以在试时可能需要模拟不同的应用场景,比如高吞吐量低延迟或者高可靠性需求的情况。 生成相关问题部分,需要考虑用户可能进一步的问题,比如如何优化ActiveMQ配置,或者如何分析试结果中的瓶颈,以及常见的性能问题有哪些。 现在需要确保回答结构清晰,分点列出方法、工具和最佳实践,同时正确引用提供的参考资料。另外,按照用户要求,所有数学表达式使用$...$格式,但在这个问题中可能涉及较少数学内容,但如果有性能公式可能需要使用。比如计算吞吐量可以用$消息数量/时间$这样的格式。 最后,检查是否符合所有系统级指令,如中文回答、引用标识的正确添加、LaTeX格式的正确性,以及相关问题的生成是否合理。</think>### 如何对 ActiveMQ 进行 JMS 试? #### 一、试方法 1. **明确试目标** - 确定核心指标:吞吐量(消息/秒)、延迟(毫秒)、系统资源占用(CPU、内存、磁盘I/O)等。 - 区分场景:持久化消息与非持久化消息、点对点(Queue)与发布订阅(Topic)模式[^2]。 2. **设计试场景** - **生产者与消费者比例**:例如1:1、1:N或N:M,模拟不同并发力。 - **消息大小**:试小消息(如1KB)和大消息(如1MB)的性能差异。 - **消息确认模式**:试自动确认(`AUTO_ACKNOWLEDGE`)与手动确认(`CLIENT_ACKNOWLEDGE`)的影响。 3. **配置 ActiveMQ 参数** - 调整内存限制:修改`activemq.xml`中的`<systemUsage>`配置,例如: ```xml <systemUsage> <systemUsage> <memoryUsage>512 MB</memoryUsage> <storeUsage>100 GB</storeUsage> <tempUsage>50 GB</tempUsage> </systemUsage> </systemUsage> ``` - 持久化优化:如引用[3]中的`journalDiskSyncStrategy`设置,平衡性能与数据一致性。 #### 二、常用工具 1. **Apache JMeter** - 使用 **JMS Point-to-Point** 或 **JMS Publisher/Subscriber** 采样器。 - 配置步骤: - 添加线程组(模拟并发用户)。 - 配置JMS连接工厂(Broker URL、队列/主题名称)。 - 设置消息内容(固定文本或随机数据)。 2. **ActiveMQ PerfTest** - 内置工具,通过命令行快速生成负载: ```bash # 启动生产者(每秒发送1000条消息) ./activemq producer --destination queue://TEST_QUEUE --messageCount 100000 --persistent # 启动消费者 ./activemq consumer --destination queue://TEST_QUEUE --messageCount 100000 ``` 3. **Tsung(分布式试)** - 支持多节点,适用于大规模场景: ```xml <load> <arrivalphase phase="1" duration="300"> <users arrivalrate="1000" unit="second"/> </arrivalphase> </load> <jms> <queue name="TEST_QUEUE"/> <producers> <producer name="producer1" queue="TEST_QUEUE"/> </producers> </jms> ``` #### 三、最佳实践 1. **逐步加** - 初始阶段:低并发(如100线程),逐步增加至目标值(如5000线程),观察系统瓶颈。 2. **监控关键指标** - **ActiveMQ控制台**:查看队列深度、消费者数量、未确认消息数。 - **系统工具**:使用`top`(CPU)、`iostat`(磁盘I/O)、`netstat`(网络连接)监控资源。 3. **优化配置建议** - **持久化消息**:若使用KahaDB,调整`journalDiskSyncInterval`为更大值(如`2000`毫秒)以提高吞吐量[^3]。 - **非持久化消息**:关闭持久化存储,减少磁盘写入开销。 - **预取限制**:设置`consumer.prefetchSize=100`,避免单个消费者占用过多资源。 4. **结果分析** - 识别瓶颈:若CPU占用高,可能是序列化/反序列化问题;若磁盘I/O高,需优化持久化策略。 - 公式参考:吞吐量 $= \frac{\text{成功处理消息数}}{\text{试时间}}$,延迟 $= \text{平均消费时间} - \text{平均生产时间}$。 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值