We deployed a continuous profiler at work today and so far the results look
really interesting.

Definitely worth the investment to setup!

Look like we’re spending 50% of our time here:

org.apache.activemq.broker.jmx.ManagedRegionBroker

    @Override
    public void removeConsumer(ConnectionContext context, ConsumerInfo
info) throws Exception {
        for (Subscription sub : subscriptionMap.keySet()) {
            if (sub.getConsumerInfo().equals(info)) {
               // unregister all consumer subs
               unregisterSubscription(subscriptionMap.get(sub), true);
            }
        }
        super.removeConsumer(context, info);
    }

… so I think a patch for that could be to keep an index around for a map
from ConsumerInfo to Subscription… then unregisterSubscription just has to
factor that in as well.

Another hotspot seems to be:

org.apache.activemq.broker.region.Queue.addToConsumerList(Subscription)

We seem to be spending 5% of our CPU time here due to sorting a list, which
I think can be eliminated.

But 5% isn’t that bad.

There’s also this:

org.apache.activemq.broker.region.AbstractRegion.addSubscriptionsForDestination(ConnectionContext,
Destination)

but it was a small impact and looks harder to optimize.


-- 

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>

Reply via email to