activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Davies <rajdav...@gmail.com>
Subject Re: Usage Manager Store is Full - Root Cause?
Date Wed, 25 Feb 2009 08:57:17 GMT
Hi Colin,

the most straightforward way to do this is to ensure that the time to  
live is always set. As you don't control all the producers - add a  
BrokerPlugin to always set the time to live - see
http://activemq.apache.org/interceptors.html

I'd recommend looking at the code for the TimeStampBrokerPlugin - http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/util/TimeStampingBrokerPlugin.java?view=markup

as a place to start

cheers,

Rob

Rob Davies
http://fusesource.com
http://rajdavies.blogspot.com/

On 24 Feb 2009, at 23:20, ColinStefani wrote:

>
> Gary,
>
> I have a related question after reading the blog post and the wiki  
> about the
> various store settings. My application keeps running in to these store
> issues, as we're sending almost 100% NON-persistent messages, yet we  
> have
> some messages which will never be consumed. I do not control all of  
> the
> producers and thus some producers send messages with no expiration  
> value.
>
> So I have queue A which effectively over time "fills" up with  
> messages and
> only 1/3 of them are consumed because they're the ones we care about,
> however we want to just dump the other 2/3 of them without consuming  
> them or
> having to even know they're there. Most importantly I do NOT want to  
> throw
> an exception to the consumers or producers as the most current  
> messages that
> pass the consumers JMS message filter statement are more important  
> than any
> of the older messages sitting around. (kind of the opposite of the  
> blog post
> scenario).
>
> So how can I ensure that we'll dumping the old to keep the "new"  
> valid? I'd
> like it to almost be a situation where the newest messages just push  
> the old
> ones out to make room instead of the broker grinding to a halt as it  
> does
> today waiting the old ones to get consumed. Since I don't have  
> control over
> the producer, is there's a way to set this by policy on the queue?
>
> We've experienced very similar slow down to stops like Richard has,  
> albeit
> under slightly different circumstances.
>
> Best Regards
>
> Colin
>
>
>
> Gary Tully wrote:
>>
>> Hi Richard,
>> There is a caveat with disk usage and the default store. Space in the
>> store is reclaimed by deleting unreferenced data files during  
>> cleanup.
>> However, if the store consists of a single data file, it will not be
>> reclaimed as the single data file will always be referenced.
>> Thus it is necessary to configure a maximumFileLength for the store
>> that is less than half of the system usage store limit. In this way,
>> at least 2 data files will be used by the store and when sufficient
>> messages have been consumes such that one of the data files is no
>> longer referenced, the store usage will decrease when it is reclaimed
>> after cleanup.
>> There is a good description of using the usage manager in this way
>> along with some configuration that works at
>> http://open-source-adventures.blogspot.com/2009/01/limiting-disk-store-usage-with-active.html
>> (see this caveat mentioned at the end).
>>
>> hope this helps,
>> Gary.
>>
>> 2009/2/23 Scouser <mq@gmav.demon.co.uk>:
>>>
>>> Hiya
>>>
>>> Thanks for that - clarified the issue nicely, but I have now found
>>> something
>>> odd which may be related.
>>>
>>> If I use flow control with fairly small values for memoryLimit e.g.
>>>
>>> <policyEntry queue="xyz.Queue" useCache="true"  
>>> producerFlowControl="true"
>>> memoryLimit="3mb">
>>>
>>> Then if I generate a lot of messages I eventually get an exception  
>>> as I
>>> would expect:
>>>
>>> javax.jms.ResourceAllocationException: SystemUsage memory limit  
>>> reached
>>>
>>> At this point, producers can only write to the queue as space is  
>>> freed up
>>> by
>>> by consumers so this works as I would expect.  However, if I use a  
>>> larger
>>> memoryLimit value and get an exception when I run out of storage:
>>>
>>> javax.jms.ResourceAllocationException: Usage Manager Store is Full
>>>
>>> then the producers seem to hang even if the pending messages are
>>> consumed.
>>> That is, they always generate a 'Usage Manager Store is Full'  
>>> exception
>>> even
>>> if all the message have been consumed.  I have also noticed that the
>>> 'Store
>>> percent used' value in the Admin application never drops once it  
>>> has got
>>> to
>>> 100%
>>>
>>> Any thoughts?
>>>
>>> Cheers
>>>
>>> Richard
>>>
>>>
>>>
>>>
>>>
>>> Dejan Bosanac wrote:
>>>>
>>>> Hi,
>>>>
>>>> you have set "store usage" in your activemq.xml and set it to  
>>>> fail if
>>>> there
>>>> is no more space. I just put up a section describing this behavior
>>>>
>>>> http://cwiki.apache.org/confluence/display/ACTIVEMQ/Producer+Flow+Control#ProducerFlowControl-Systemusage
>>>>
>>>> Cheers
>>>> --
>>>> Dejan Bosanac
>>>>
>>>> Open Source Integration - http://fusesource.com/
>>>> ActiveMQ in Action - http://www.manning.com/snyder/
>>>> Blog - http://www.nighttale.net
>>>>
>>>>
>>>> On Sun, Feb 22, 2009 at 3:52 PM, Scouser <mq@gmav.demon.co.uk>  
>>>> wrote:
>>>>
>>>>>
>>>>> I'm fairly new to activeMQ and have become stuck on an error.  I  
>>>>> don't
>>>>> seem
>>>>> to be able to find much out about the root cause.  I have a small
>>>>> example
>>>>> which send messages to a couple of queues and reads the messages  
>>>>> out.
>>>>> I'm
>>>>> using Spring's JMS template etc to do most of the hard work.
>>>>>  Eventually
>>>>> I
>>>>> get the following crash:
>>>>> ...
>>>>> SEVERE: Usage Manager Store is Full; nested exception is
>>>>> javax.jms.ResourceAllocationException: Usage Manager Store is Full
>>>>> org.springframework.jms.ResourceAllocationException: Usage Manager
>>>>> Store
>>>>> is
>>>>> Full; nested exception is javax.jms.ResourceAllocationException:  
>>>>> Usage
>>>>> Manager Store is Full
>>>>>        at
>>>>>
>>>>> org 
>>>>> .springframework 
>>>>> .jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:298)
>>>>>        at
>>>>>
>>>>> org 
>>>>> .springframework 
>>>>> .jms 
>>>>> .support.JmsAccessor.convertJmsAccessException(JmsAccessor.java: 
>>>>> 168)
>>>>>        at
>>>>> org 
>>>>> .springframework.jms.core.JmsTemplate.execute(JmsTemplate.java: 
>>>>> 474)
>>>>>
>>>>> ...
>>>>> Caused by: javax.jms.ResourceAllocationException: Usage Manager  
>>>>> Store
>>>>> is
>>>>> Full
>>>>>        at
>>>>> org.apache.activemq.broker.region.Queue.doMessageSend(Queue.java: 
>>>>> 430)
>>>>>        at  
>>>>> org.apache.activemq.broker.region.Queue.send(Queue.java:417)
>>>>>        at
>>>>>
>>>>> org 
>>>>> .apache 
>>>>> .activemq.broker.region.AbstractRegion.send(AbstractRegion.java: 
>>>>> 354)
>>>>> ...
>>>>>
>>>>> So, what is the 'Usage Manager' ?, any ideas what I may have done
>>>>> wrong?,
>>>>> any and all help appreciated!
>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/Usage-Manager-Store-is-Full---Root-Cause--tp22147570p22147570.html
>>>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>
>>>>
>>>> -----
>>>> Dejan Bosanac
>>>>
>>>> Open Source Integration - http://fusesource.com/
>>>> ActiveMQ in Action - http://www.manning.com/snyder/
>>>> Blog - http://www.nighttale.net
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Usage-Manager-Store-is-Full---Root-Cause--tp22147570p22172029.html
>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> -- 
>> http://blog.garytully.com
>>
>> Open Source SOA
>> http://FUSESource.com
>>
>>
>
> -- 
> View this message in context: http://www.nabble.com/Usage-Manager-Store-is-Full---Root-Cause--tp22147570p22192964.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>













Mime
View raw message