Hello.
I have a question regarding the ActiveMQ temp usage. (The ActiveMQ version
is 5.10.0 but also checked with latest 5.13.2; as storage I´ve tested with
KahaDb and mKahadb)
In our system we have some queues and topics. The topics has persistent
messages; the queues has combinations of persistent and non-persistent
messages (also mixed in one queue).
The producer flow control is turned off due to performance considerations on
the producer side.

My understanding is, that persistent messages are stored via fileCursor in
the files.

And now to the observations in a running system:
- the topic (ServerPushTopic) gets "a lot" of messages in a short amount of
time (approx. 5000/minute at peak times)
-- the consumer is relatively slow
-- the producers are typically demon jobs which produces the vast amount of
messages; but also UI interactions
- the other queues are randomely accessed by producers and consumers; both
sides fast
- the messages are a mix of text and object messages; but typically really
small

The "enqueued" count of the ServerPushTopic increases fast; the dequeued
count only slow because of the slow consumers. After some time (dependend on
the system usage configuration) we get following error messages:
  <javax.jms.ResourceAllocationException: Temp Store is Full (100% of
xxxxxxxx). Producer (ID:hostname-xxxx) stopped to prevent flooding
queue://PLC.Queue. See http://activemq.apache.org/producer-flow-control.html
for more info>

If I look in the temp files of the KahaDb (./data/tmp_storage) I see mostly
topic messages of ServerPushTopic inside.
But: why are these messages stored in the temp files and not in the
persistent memory of KahaDb? (Remember: messages to ServerPushTopic are
persistent.)
  
I´ve already tried a lot of configuration options for the ServerPushTopic,
for example:
- pendingSubscriberPolicy
- pendingDurableSubscriberPolicy
- slowConsumerStrategy
- and a lot of combinations thereof

The system usage part of the broker.xml (values are trimmed down to
reproduce the 100% temp store error faster; on production side, these values
are of course much higher.)
        <systemUsage>
            <systemUsage sendFailIfNoSpace="true">
                <memoryUsage>
                    <memoryUsage limit="96 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="5000 mb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="256 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>  

                
The only way I could get around this problem is to enable the
producerFlowControl; but as mentioned earlier I´d really like to have it
turned off because of performance reasons on the producer side.

Could someone please explain, why the ServerPushTopic messages are stored
into the tempUsage and causes the mentioned error?              

Best regards
Joachim



--
View this message in context: 
http://activemq.2283324.n4.nabble.com/Clarification-of-temp-usage-tp4711305.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to