activemq调优

activemq 调优

1.jconsole监控

vim /usr/local/apache-activemq-5.12.1/conf/activemq.xml
#添加useJmx="true"
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="interface" dataDirectory="${activemq.data}" useJmx="true">

vim /usr/local/apache-activemq-5.12.1/bin/env
#设置ACTIVEMQ_SUNJMX_START
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=10.10.10.55 -Dcom.sun.management.jmxremote.port=11616 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

其中:

-Djava.rmi.server.hostname=10.10.10.55 必须添加,否则无法通过ip+port连接失败
-Dcom.sun.management.jmxremote.port=11616 设置jconsole监控的端口

2.Reducing Threads
默认情况下,activemq每个连接都有一个专门的线程处理,因此当有大量连接时,就会产生很多线程和内存。activemq针对此种情况,可以配置成使用一个线程池来处理,从而达到限制线程数及减少内存使用的效果。
可以通过-Dorg.apache.activemq.UseDedicatedTaskRunner,将其设置成false以下方式实现,具体如下:

vim /usr/local/apache-activemq-5.12.1/bin/env
#设置ACTIVEMQ_OPTS
ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Dorg.apache.activemq.UseDedicatedTaskRunner=false -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config"

另外如果需要设置activemq使用内存,可以如下设置:

vim /usr/local/apache-activemq-5.12.1/bin/env
#设置ACTIVEMQ_OPTS_MEMORY
ACTIVEMQ_OPTS_MEMORY="-Xms1G -Xmx1G"

3.InactivityMonitor
每个connection有两个InactivityMonitor关联,分别在connection的两段。InactivityMonitor在连接特定的时间段内准备接受数据,如果没有收到数据,就希望收到对端InactivityMonitor发送的keepaliveinfo信息,通过这种方式来检查连接的活动线程是否仍处在活动状态,若没有收到keepaliveinfo信息,就会怀疑连接不正常,则会关闭此连接。

因此在日志中报错“ org.apache.activemq.transport.InactivityIOException: Channel was inactive (no connection attempt made) for too (>30000) long: tcp://10.10.10.19:56091 | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ InactivityMonitor Worker”,则说明连接在默认配置下(默认30000ms)没有任何数据传输,则InactivityMonitor就会关闭此链接并抛出一个InactivityIOException异常。

相关参数设置:
wireFormat.maxInactivityDuration 默认30000ms
可以通过以下方式进行调整:

<transportConnectors>
  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=30000&amp;wireFormat.maxInactivityDurationInitalDelay=10000"/>
</transportConnectors> 

关闭InactivityMonitor,可以通过以下方式:
a.transport.useInactivityMonitor=false
b.wireFormat.maxInactivityDuration=0

4.failover transport

zookeeper+activemq组成的amq高可用集群下

当其中一个broker失效的情况下,客户端一直尝试reconnect,因为maxReconnectAttempts=-1|0,从5.6开始默认为-1,表示会一直reconnect;0表示禁用reconnect,也就是说只连接一次。

mq.broker.url=failover:(tcp://10.10.1.29:61616?wireFormat.maxInactivityDuration=5000,tcp://10.10.1.30:61616?wireFormat.maxInactivityDuration=5000,tcp://10.10.1.31:61616?wireFormat.maxInactivityDuration=5000)?timeout=3000

5.zookeeper+activemq优化
zookeeper+activemq组成的amq高可用,其中需要注意下“zkSessionTimeout” 这个参数,它的作用是在这个时间段内检查broker是否因为网络问题导致无法连接到zookeeper server,当在规定时间内发现broker无法连接zookeeper server,此时master将会放弃master角色,slave将会重新选举出拥有最新同步数据将会作为新的master,默认时间为“2s”,单位s,m,h,d,w,m,y;但是也不是随意设置,会结合zookeeper的是的ticket time,在2*ticket time ~20*ticket time 之间,默认为2*ticket time,也就是4s

设置完毕后,我们可以在amq启动后,会在日志activemq.log中看到

Session establishment complete on server 192.168.3.126/192.168.3.126:2181, sessionid = 0x2516a8d774f0042, negotiated timeout = 10000 | org.apache.zookeeper.ClientCnxn | main-SendThread(192.168.3.126:2181)Session establishment complete on server 192.168.3.126/192.168.3.126:2181, sessionid = 0x2516a8d774f0042, negotiated timeout = 10000 | org.apache.zookeeper.ClientCnxn | main-SendThread(192.168.3.126:2181)

其中“negotiated timeout = 10000”就是我们设置的协商时间,当在10s内zookeeper无法与broker进行通讯,则有可能触发master重新选举。

虽然通过降低timeout时间,选举过程会更快,但是如果网络有波动,没有disconnect,也有可能导致重新选举。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值