中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ActiveMQ問題分析和解決是怎樣的

發布時間:2021-12-08 09:56:17 來源:億速云 閱讀:338 作者:柒染 欄目:互聯網科技

ActiveMQ問題分析和解決是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1)KahaDb和AMQ Message Store兩種持久方式如何選擇?

官方:

From 5.3 onwards - we recommend you use KahaDB - which offers improved scalability and recoverability over the AMQ Message Store.

The AMQ Message Store which although faster than KahaDB - does not scales as well as KahaDB and recovery times take longer.

非官方:

kaha文件系統實際上上是一個文件索引系統,有兩部分組成,一個是數據文件系統,由一個個獨立的文件組成,缺省文件大小是32M大(可配置),另外一個是索引文件系統,記錄消息在數據文件中的位置信息以及數據文件中的空閑塊信息。數據文件是存儲到硬盤上的,索引文件是緩存在內存中的。所以這個存儲系統對大消息存儲有利,象我們的memberId之類的文本消息,實際上是浪費,索引比消息還大,哈。

我方分析:

推薦: Amq持久方式

理由:雖然官方推薦使用KahaDB持久方式,但其提到的優勢:可伸縮性和恢復性較好,對于我們實際的應用意義不大。從我們自己的使用經驗來看,KahaDB持久方式,Data文件是一個大文件(感覺文件過大后,造成隊列服務癱死的可能性會增大),從官網的相關配置(附錄1)也找不到哪里可以設置數據的文件的最大Size。)而Amq持久方式可以設置Data文件最大Size,這樣可以保證即時消息積壓很多,Data文件也不至于過大。

2)錯誤:Channel was inactive for too long

解決方法:

在建立連接的Uri中加入: wireFormat.maxInactivityDuration=0

參考資源:

http://jinguo.iteye.com/blog/243153

You can do the following to fix the issues:

1) Append max inactivity duration to your Uri in the format below: wireFormat.maxInactivityDuration=0

2) Use the same Uri at the client side as well as at the server side

Regards,

如果不這樣設置,對應的錯誤會出現:

2008-05-07 09:22:56,343 [org.apache.activemq.ActiveMQConnection]-[WARN] Async exception with no exception listener: org.apache.activemq.transport.InactivityIOException: Channel was inactive for too long: localhost/127.0.0.1:61616

org.apache.activemq.transport.InactivityIOException: Channel was inactive for too long: localhost/127.0.0.1:61616

ActiveMQ的tcp url:tcp://localhost:61616后面要加入?wireFormat.maxInactivityDuration=0 這樣的參數,否則當一段時間沒有消息發送時會拋出 "Channel was inactive for too long"異常

3)錯誤:Wire format negotiation timeout: peer did not send his wire format.

解決方法:

1)關閉ActiveMqLog4j

打開:conf/log4j.properties

將:log4j.rootLogger=INFO, console, logfile

修改為:log4j.rootLogger=OFF

2)在建立連接的Uri中加入: maxInactivityDurationInitalDelay=30000

例如北京的測試環境連接Uri:

tcp://192.168.199.80:61616?wireFormat.maxInactivityDuration=0&maxInactivityDurationInitalDelay=30000&connection.AsyncSend=true

 

參考資源:

http://activemq.apache.org/javaxjmsjmsexception-wire-format-negociation-timeout-peer-did-not-send-his-wire-format.html

If you get exception like this,it can mean one of three things:

1. You're connecting to the port not used by ActiveMQ TCP transport

Make sure to check that you're connecting to the appropriate host:port

2. You're using log4j JMS appender and doesn't filter out ActiveMQ log messages

Be sure to read How do I use log4j JMS appender with ActiveMQ and more importantly to never send ActiveMQ log messages to JMS appender

3. Your broker is probably under heavy load (or network connection is unreliable), so connection setup cannot be completed in a reasonable time

If you experience sporadic exceptions like this, the best solution is to use failover transport, so that your clients can try connecting again if the first attempt fails. If you're getting these kind of exceptions more frequently you can also try extending wire format negotiation period (default 10 sec). You can do that by using wireFormat.maxInactivityDurationInitalDelay property on the connection URL in your client.

For example

tcp://localhost:61616?wireFormat.maxInactivityDurationInitalDelay=30000

will use 30 sec timeout.(貌似有問題!!!)

4)錯誤:Out of memory

解決方法:

1)  設置Java最大內存限制為合適大小:

Bin/activemq.bat 中ACTIVEMQ_OPTS=-Xmx512M(默認是512)

2)Activemq.xml配置節:systemUsage/ systemUsage配置大小合適,并且特別注意:大于所有durable desitination設置的memoryUsage之和。

備注:

1)尖括號:“>”代表通配符

2)ACTIVEMQ_OPTS的配置〉=memoryUsage中配置〉=所有durable desitination設置之和

3)SystemUsage配置設置了一些系統內存和硬盤容量,當系統消耗超過這些容量設置時,amq會“slow down producer”,還是很重要的。

參考資料:

http://m.oschina.net/blog/26216

參考-- http://activemq.apache.org/javalangoutofmemory.html

       對于MQ的內容實用是可管理和可配置的。首先需要判斷的是MQ的哪部分系統因內存不足而導致泄漏,是JVM,broker還是消費者、生產者?

       一、內存管理

       JVM內存管理:

       1. 用bin/activemq命令在獨立JVM中運行broker。用-Xmx和-Xss命令即可(activemq.bat文件中修改ACTIVEMQ_OPTS選項參數即可);

       2. 默認情況下,MQ用512M的JVM;

       broker內存管理:

       1. broker使用的內存并不是由JVM的內存決定的。雖然受到JVM的限制,但broker確實獨立管理器內存;

       2. systemUsage和destination的內存限制與broker內存息息相關;

       3. MQ中內存的關系是:JVM->Broker->broker features;

       4. 所有destination的內存總量不能超過broker的總內存;

       消費者:

       1. 由于消息大小可以配置,prefetch limit往往是導致內存溢出的主要原因;

       2. 減少prefetch limit的大小,會減少消費者內存中存儲的消息數量;

       生產者:

       1. 除非消息數量超過了broker資源的限制,否則生產者不會導致內存溢出;

       2. 當內存溢出后,生產者會收到broker的阻塞信息提示;

       二、其他

       將消息緩沖之硬盤:

       1. 只有當消息在內存中存儲時,才允許消息的快速匹配與分發,而當消費者很慢或者離開時,內存可能會耗盡;

       2. 當destination到達它的內存臨界值時,broker會用消息游標來緩存非持久化的消息到硬盤。

       3. 臨界值在broker中通過memoryUsage和systemUsage兩個屬性配置,請參考activemq.xml;

       4. 對于緩慢的消費者,當尚未耗盡內存或者轉變為生產者并發控制模式前,這個特性允許生產者繼續發送消息到broker;

       5. 當有多個destination的時候,默認的內存臨界值可能被打破,而這種情況將消息緩存到硬盤就顯得很有意義;

       6. precentUsage配置:使用百分比來控制內存使用情況;

       多個線程:

       1. 默認情況下,MQ每個destination都對應唯一的線程;

       2. -Dorg.apache.activema.UseDedicatedTaskRunner=false(activemq.bat文件中修改ACTIVEMQ_OPTS選項參數即可),用線程池來限制線程的數量,從而減少內存消耗;

       大數據傳輸:

       1. destination policies--maxPageSize:控制進入內存中的消息數量;lazyDispatch:增加控制使用當前消費者列表的預取值;

       2. 使用blogMessage或者streamsMessage類型來進行大量文件的傳輸;

       泄漏JMS資源:

       1. 當session或者producer或者consumer大量存在而沒有關閉的時候;

       2. 使用PooledConnectionFactory;

5)采用failover方式連接導致卡死

解決方法

不采用failover連接

分析

采用failover方式連接,如果所要連接的服務器或者Activemq服務宕了,那么程序會一直處于等待狀態,不超時,不報錯。

二)附錄

1)KahaDB持久配置

property name

default value

Comments

directory

activemq-data

the path to the directory to use to store the message store data and log files

indexWriteBatchSize

1000

number of indexes written in a batch

indexCacheSize

10000

number of index pages cached in memory

enableIndexWriteAsync

false

if set, will asynchronously write indexes

journalMaxFileLength

32mb

a hint to set the maximum size of the message data logs

enableJournalDiskSyncs

true

ensure every non transactional journal write is followed by a disk sync (JMS durability requirement)

cleanupInterval

30000

time (ms) before checking for a discarding/moving message data logs that are no longer used

checkpointInterval

5000

time (ms) before checkpointing the journal

ignoreMissingJournalfiles

false

If enabled, will ignore a missing message log file

checkForCorruptJournalFiles

false

If enabled, will check for corrupted Journal files on startup and try and recover them

checksumJournalFiles

false

create a checksum for a journal file - to enable checking for corrupted journals

Available since version 5.4:

  

archiveDataLogs

false

If enabled, will move a message data log to the archive directory instead of deleting it.

directoryArchive

null

Define the directory to move data logs to when they all the messages they contain have been consumed.

databaseLockedWaitDelay

10000

time (ms) before trying to get acquire a the database lock (used by shared master/slave)

maxAsyncJobs

10000

the maximum number of asynchronous messages that will be queued awaiting storage (should be the same as the number of concurrent MessageProducers)

concurrentStoreAndDispatchTopics

false

enable the dispatching of Topic messages to interested clients to happen concurrently with message storage

concurrentStoreAndDispatchQueues

true

enable the dispatching of Queue messages to interested clients to happen concurrently with message storage

2)AMQ持久配置

property name

default value

Comments

directory

activemq-data

the path to the directory to use to store the message store data and log files

useNIO

true

use NIO to write messages to the data logs

syncOnWrite

false

sync every write to disk

maxFileLength

32mb

a hint to set the maximum size of the message data logs

persistentIndex

true

use a persistent index for the message logs. If this is false, an in-memory structure is maintained

maxCheckpointMessageAddSize

4kb

the maximum number of messages to keep in a transaction before automatically committing

cleanupInterval

30000

time (ms) before checking for a discarding/moving message data logs that are no longer used

indexBinSize

1024

default number of bins used by the index. The bigger the bin size - the better the relative performance of the index

indexKeySize

96

the size of the index key - the key is the message id

indexPageSize

16kb

the size of the index page - the bigger the page - the better the write performance of the index

directoryArchive

archive

the path to the directory to use to store discarded data logs

archiveDataLogs

false

if true data logs are moved to the archive directory instead of being deleted

3)systemUsage配置

property name

default value

Comments

memoryUsage

20M

amq使用內存大小,照amq論壇上說,這個值應該大于所有durable desitination設置的

memoryUsage之和,否則會導致硬盤swap,影響性能。

storeUsage

1G

kaha數據存儲大小,如果設置不足,性能會下降到1個1個發

tempUsage

100M

非persistent的消息存儲在temp區域

4)其他配置

http://activemq.apache.org/nms/configuring.html

4.1)Failover Transport Options

Option Name

Default

Description

transport.timeout

-1

Time that a send operation blocks before failing.

transport.initialReconnectDelay

10

Time in Milliseconds that the transport waits before attempting to reconnect the first time.

transport.maxReconnectDelay

30000

The max time in Milliseconds that the transport will wait before attempting to reconnect.

transport.backOffMultiplier

2

The amount by which the reconnect delay will be multiplied by if useExponentialBackOff is enabled.

transport.useExponentialBackOff

true

Should the delay between connection attempt grow on each try up to the max reconnect delay.

transport.randomize

true

Should the Uri to connect to be chosen at random from the list of available Uris.

transport.maxReconnectAttempts

0

Maximum number of time the transport will attempt to reconnect before failing (0 means infinite retries)

transport.startupMaxReconnectAttempts

0

Maximum number of time the transport will attempt to reconnect before failing when there has never been a connection made. (0 means infinite retries) (included in NMS.ActiveMQ v1.5.0+)

transport.reconnectDelay

10

The delay in milliseconds that the transport waits before attempting a reconnection.

transport.backup

false

Should the Failover transport maintain hot backups.

transport.backupPoolSize

1

If enabled, how many hot backup connections are made.

transport.trackMessages

false

keep a cache of in-flight messages that will flushed to a broker on reconnect

transport.maxCacheSize

256

Number of messages that are cached if trackMessages is enabled.

transport.updateURIsSupported

true

Update the list of known brokers based on BrokerInfo messages sent to the client.

4.2)Connection Options

Option Name

Default

Description

connection.AsyncSend

false

Are message sent Asynchronously.

connection.AsyncClose

true

Should the close command be sent Asynchronously

connection.AlwaysSyncSend

false

Causes all messages a Producer sends to be sent Asynchronously.

connection.CopyMessageOnSend

true

Copies the Message objects a Producer sends so that the client can reuse Message objects without affecting an in-flight message.

connection.ProducerWindowSize

0

The ProducerWindowSize is the maximum number of bytes in memory that a producer will transmit to a broker before waiting for acknowledgement messages from the broker that it has accepted the previously sent messages. In other words, this how you configure the producer flow control window that is used for async sends where the client is responsible for managing memory usage. The default value of 0 means no flow control at the client. See also Producer Flow Control

connection.useCompression

false

Should message bodies be compressed before being sent.

connection.sendAcksAsync

false

Should message acks be sent asynchronously

connection.messagePrioritySupported

true

Should messages be delivered to the client based on the value of the Message Priority header.

connection.dispatchAsync

false

Should the broker dispatch messages asynchronously to the connection's consumers.

 

4.3)OpenWire Options

Option Name

Default

Description

wireFormat.stackTraceEnabled

false

Should the stack trace of exception that occur on the broker be sent to the client? Only used by openwire protocol.

wireFormat.cacheEnabled

false

Should commonly repeated values be cached so that less marshalling occurs? Only used by openwire protocol.

wireFormat.tcpNoDelayEnabled

false

Does not affect the wire format, but provides a hint to the peer that TCP nodelay should be enabled on the communications Socket. Only used by openwire protocol.

wireFormat.sizePrefixDisabled

false

Should serialized messages include a payload length prefix? Only used by openwire protocol.

wireFormat.tightEncodingEnabled

false

Should wire size be optimized over CPU usage? Only used by the openwire protocol.

wireFormat.maxInactivityDuration

30000

The maximum inactivity duration (before which the socket is considered dead) in milliseconds. On some platforms it can take a long time for a socket to appear to die, so we allow the broker to kill connections if they are inactive for a period of time. Use by some transports to enable a keep alive heart beat feature. Set to a value <= 0 to disable inactivity monitoring.

maxInactivityDurationInitalDelay

10000

The initial delay in starting the maximum inactivity checks (and, yes, the word 'Inital' is supposed to be misspelled like that)

 

5)安全配置

1、控制臺安全配置,打開conf/jetty.xml文件,找到

    <bean id="securityConstraint" class="org.eclipse.jetty.http.security.Constraint">

        <property name="name" value="BASIC" />

        <property name="roles" value="admin" />

        <property name="authenticate" value="false" />

    </bean>

   將“false”改為“true”即可。用戶名和密碼存放在conf/jetty-realm.properties文件中。

2、生產者和消費者連接MQ需要密碼

   打開conf/activemq.xml文件,在<broker>標簽里的<systemUsage>標簽前加入:

   <plugins>  

<simpleAuthenticationPlugin>  

<users>  

<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>  

</users>  

</simpleAuthenticationPlugin>  

   </plugins>

 注意必須在<systemUsage>標簽前,否則啟動ActiveMQ會報錯。

 

用戶名和密碼存放在conf/credentials.properties文件中

關于ActiveMQ問題分析和解決是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

远安县| 当雄县| 吉首市| 平陆县| 双流县| 唐河县| 方城县| 南丰县| 沂源县| 沭阳县| 鸡西市| 舟山市| 兴文县| 惠来县| 西平县| 江西省| 宜兰县| 黄石市| 陕西省| 静海县| 甘南县| 正蓝旗| 萨迦县| 建宁县| 广昌县| 穆棱市| 平塘县| 分宜县| 黄骅市| 福建省| 资阳市| 横山县| 门头沟区| 平舆县| 赞皇县| 修水县| 南华县| 隆尧县| 民乐县| 工布江达县| 东阳市|