OK.. but what I don’t understand is that I have at least ONE consumer that
matches. So that one should keep being served (though with imperfect
priority)

Also, as a test, I shut down ALL consumers on the broker, then just had ONE
consumer, and the selector was

artemis_priority <= 9

… and this should have matched ANYTHING.  But it didn’t work.



On Fri, Apr 24, 2015 at 2:30 PM, Tim Bain <tb...@alumni.duke.edu> wrote:

> Keep in mind that a pause as described by that JIRA could come about
> because your consumer has a full prefetch buffer worth of messages that
> match the selector plus lots more messages in the store.  If you have a
> backlog for any consumer, anything that can't fit in the consumer's
> prefetch buffer will hang out in the cursor and eventually the message
> store (outside, and blocked by, the cursor).  It's not necessary to have
> messages that fail to match any selector, though that will certainly
> produce the behavior too.
>
> Tim
>
> On Fri, Apr 24, 2015 at 3:21 PM, Kevin Burton <bur...@spinn3r.com> wrote:
>
> > Literally JUST found this issue!
> >
> > Is this documented anywhere? My issue is that there *is* no sparse
> message
> > distribution.  Every message has a value from between 0 and 9 with none
> > lacking that header.
> >
> > I even consume where the message is lacking the value.
> >
> > So there shouldn’t be anything left over.
> >
> > I think ActiveMQ should probably log an error when this happens.
> >
> > On Fri, Apr 24, 2015 at 2:03 PM, Timothy Bish <tabish...@gmail.com>
> wrote:
> >
> > > On 04/24/2015 04:50 PM, Kevin Burton wrote:
> > > > I’ve been working 15 hour days for the last 2-3 weeks trying to
> resolve
> > > > this so if this is somewhat incoherent it’s probably due to lack of
> > sleep
> > > > :-P
> > > >
> > > > I think we’re experiencing a bug in ActiveMQ which is VERY hard to
> > > > reproduce but happens regularly in our production setup.
> > > >
> > > > I can’t reproduce it in my test setup because it seems to require
> real
> > > > world data.  Every time I try to do so everything works fine.
> > > >
> > > > It seems you have to have the following:
> > > >
> > > > - a large number of queues which need servicing ( > 1000)
> > > > - a fairly large number of connections (>2000)
> > > > - message selectors
> > > > - a queue that has a large number of messages (5000).
> > > >
> > > > I have my test code now reproducing it…
> > > >
> > > > Everything works FINE if we have just a few message.  The problems
> > arise
> > > > once the queue size grows at which point selectors don’t work.
> > > >
> > > > It seems like *early* connections win.  If I create a connection to
> > > > ActiveMQ early, and keep it open, it will work. But new connections
> > don’t
> > > > work..  Eventually, the existing connections will fail too.
> > > >
> > > > Basically, it works JUST FINE without message selectors.
> > > >
> > > > I KNOW it’s not my code because I’ve written a basic /simple consumer
> > > which
> > > > is literally just raw JMS and is < 50 lines of code.
> > > >
> > > > I also know my messages selectors should match.  First.  they do
> match
> > > some
> > > > percentage of the time. Second, when I consume without the message
> > > > selectors, it works.  I have it print the message headers and I can
> > > confirm
> > > > that they should match.
> > > >
> > > > This also seems to get worse over time.  The larger the queue, the
> less
> > > > chance messages will be serviced, eventually it will just lock up
> > > entirely.
> > > >
> > > >
> > > > There are no obvious errors in the ActiveMQ log.  Just regarding
> queue
> > > GC.
> > > >
> > > > The box still has about 40% memory free.  So I don’t think it has any
> > > issue
> > > > with memory.  No OutOfMemoryErrors being logged.
> > > >
> > > > I think another way to debug this could be to restart activemq itself
> > > with
> > > > message tracing. Then try to get the queue to this state again, and
> try
> > > to
> > > > consume messages nd see what’s being logged while it’s failing.
> > > >
> > > > What’s frustrating here is that this is the 3rd ActiveMQ workaround
> > I’ve
> > > > had to implement.
> > > >
> > > > the first was because LevelDB was very slow… (artificially slow it
> > > seems),
> > > > so then I decided to just use the memory store.  But the memory store
> > > > doesn’t support priority, so instead, I implemented priority through
> > JMS
> > > > selectors.  But now JMS selectors don’t work.
> > > >
> > > > :-/
> > > >
> > > This sounds a lot like the standard issue of having a deep queue and
> the
> > > message selector not being able to match because the maxPageSize value
> > > is limiting what the message cursor will page in.  Have you tried
> upping
> > > the maxPageSize option?  See:
> > > https://issues.apache.org/jira/browse/AMQ-2217
> > >
> > > --
> > > Tim Bish
> > > Sr Software Engineer | RedHat Inc.
> > > tim.b...@redhat.com | www.redhat.com
> > > twitter: @tabish121
> > > blog: http://timbish.blogspot.com/
> > >
> > >
> >
> >
> > --
> >
> > Founder/CEO Spinn3r.com
> > Location: *San Francisco, CA*
> > blog: http://burtonator.wordpress.com
> > … or check out my Google+ profile
> > <https://plus.google.com/102718274791889610666/posts>
> > <http://spinn3r.com>
> >
>



-- 

Founder/CEO Spinn3r.com
Location: *San Francisco, CA*
blog: http://burtonator.wordpress.com
… or check out my Google+ profile
<https://plus.google.com/102718274791889610666/posts>
<http://spinn3r.com>

Reply via email to