Activemqチューニング

6425 ワード

Activemqチューニング
1.jconsoleモニタリング
vim /usr/local/apache-activemq-5.12.1/conf/activemq.xml
#  useJmx="true"
"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.0.10.10.55は追加する必要があります.そうしないとip+port接続に失敗します.sun.management.jmxremote.port=1616 jconsoleモニタのポートを設定する
2.Reducing Threadsのデフォルトでは、activemqの各接続には専用のスレッド処理があるため、大量の接続がある場合、多くのスレッドとメモリが生成されます.Activemqは、この場合、スレッドプールを1つ使用して処理するように構成することで、スレッド数を制限したり、メモリの使用を減らしたりする効果があります.-torg.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には、connectionの2つのセグメントにそれぞれ2つのInactivityMonitorが関連付けられています.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は、接続がデフォルト設定(デフォルト30000 ms)でデータ転送されていないことを示します.InactivityMonitorはこのリンクを閉じ、InactivityIOException例外を放出します.
関連パラメータの設定:wireFormat.maxInactivityDurationのデフォルト30000 msは、次のように調整できます.
<transportConnectors>
  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=30000&wireFormat.maxInactivityDurationInitalDelay=10000"/>
transportConnectors> 

InactivityMonitorを閉じるには、a.transport.useInactivityMonitor=false b.wireFormat.maxInactivityDuration=0
4.failover transport
zookeeper+activemqからなるamq高可用性クラスタの下で
いずれかのbrokerが無効になった場合、クライアントはreconnectを試み続けた.maxReconectAttempts=-1|0のため、5.6からデフォルトは-1であり、reconnectが継続することを示している.0はreconnectを無効にします.つまり、1回だけ接続します.
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に接続できないかどうかを確認し、規定時間内にbrokerがzookeeperに接続できないことを発見すると、masterはmasterロールを放棄します.slaveは、最新の同期データを持つことを新しいmasterとして再選挙し、デフォルトは「2 s」、単位s、m、h、d、w、m、yである.ただし、勝手に設定するわけではなく、zookeeeperが結合するのはticket timeで、2*ticket time~20*ticket timeの間で、デフォルトは2*ticket time、つまり4 sです
設定が完了するとamqが起動するとログactivemqになります.ロゴには
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」は私たちが設定した交渉時間であり、10 s以内にzookeeperがbrokerと通信できない場合、masterの再選挙をトリガーする可能性があります.
timeout時間を減らすことで選挙過程はさらに速くなるが、ネットが変動し、disconnectがなければ再選挙につながる可能性もある.