Hi, I think you can try disable concurrentStoreAndDispatchQueues and rerun the tests.
Alan Diego On Wed, Aug 28, 2019 at 9:42 AM James Green <james.mk.gr...@gmail.com> wrote: > Hi, > > Following-up as I've run more tests. > > My minimal producer suffered the same bug as our main application: we had > spring boot activemq thread pooling turned on as a property, but the > library (referenced in the main docs) was not included. Looking back at my > rather sparse notes at the time I activated this my sends of 10K messages > went from taking 11m47s to between 2m56s - 3m31s which is a marked > improvement. > > To my chagrin, this has made little different to our real-world > application, and so I have modified my minimal producer to be capable of > sending to the main application via it's queues. > > Allow me to elaborate at this point as it's important to understand what > I'm looking at... > > The messages follow a small path through a series of queues as they are > processed. Queue A -> B -> C. > > If my minimal producer sends to Queue C (skipping A and B) I'm able to > produce at 49/s which is "quick enough". > If my minimal producer sends to Queue B (skipping A) I'm able to produce at > 28/s - 38/s which is variable but most of the tests reached 38/s. > If my minimal producer sends to Queue A I'm able to produce at 28/s - 42/s > - again variable. > > Now Queues A and B are consumed by separate Camel routes inside the same > application. Queue C is entirely separate. > > Looking at throughput graphs of the consumption of Queue C, when first > going through (A,B) for 10K messages, then going through (B), I can see > (A,B) is twice as slow. > > I'm left wondering if there's contention somehow within the application > consuming from (A,B) that is only showing up during load testing on AWS, I > was not expecting it would be 2x slower unless the producer thread is > shared - you might imagine a thread pool was solve that! > > At this point I have ensured that there are 4 instances of each application > and they can happily deal with about 50 messages per second across the > queues with persistence on. I am uncertain whether I should be expecting > more. > > If anyone has insights on why the two routes within the same application > appear contended and indeed on whether overall throughput should be a lot > higher I'd love to hear it. > > James > > > On Thu, 22 Aug 2019 at 14:02, Tim Bain <tb...@alumni.duke.edu> wrote: > > > Can you create a minimal producer via the OpenWire protocol in Java or > > another language of your choice, to determine if your Camel producer is > > slow because it's OpenWire or because it's Camel? I suspect you'll find > > that OpenWire is the culprit, not Camel, but let's confirm that. > > > > All of these numbers sound tiny compared to what the ActiveMQ product is > > capable of (though I don't have any insight into how Amazon has > configured > > the brokers, nor into any code customizations they might have made). If > you > > run multiple minimal producers in parallel, does throughput increase > > linearly? > > > > Also, you say you're testing with small payloads; are they small enough > > that you might be running into the Nagle algorithm on your TCP sockets? > If > > you use larger (e.g. 1KB) payloads, what does that do to your throughput > on > > a single producer? > > > > Tim > > > > On Thu, Aug 22, 2019, 2:54 AM James Green <james.mk.gr...@gmail.com> > > wrote: > > > > > Hi all, > > > > > > I've been busy shifting an existing workload into AWS recently, and a > > load > > > test shows a serious performance drop when sending to ActiveMQ which I > > > could use some advice on. > > > > > > Quick architecture summary: We send requests via a webserver that are > > > forwarded as messages to a queue. A backend receives these messages and > > > forwards them onward to another queue. Spring Boot with Camel powers > the > > > show within Docker containers. Messages are persistent. > > > > > > Story so far: > > > > > > Tests show this first queue builds rapidly with pending messages yet > > > monitoring of our existing production environment shows no such > backlog. > > > > > > Our existing production environment has everything in a single DC so > it's > > > super low latency. Our AWS environment uses Fargate with AmazonMQ. I > > > understand send latency will be higher and AmazonMQ will store the > > messages > > > across three AZs. > > > > > > So I launched a small EC2 instance to run some comparison tests: > > > > > > Receiving via a Camel route is super quick. This is not a problem. > > > Sending via a minimal Camel route is super slow. 14 messages per > second. > > We > > > appear to be doing at least 20-30 per second in production but it's > > enough > > > of a difference. > > > Sending via PHP with stomp-php setting both persistence on and receipt > > > headers on is substantially faster than sending via Camel. 55 messages > > per > > > second. > > > Tests have been with 10K small payloads. > > > > > > At this point I'm thinking that both Camel and PHP should be sending > with > > > the same properties - synchronously and with persistence. The messages > on > > > the queue are flagged persistent when viewed by the web console. > > > > > > Can anyone provide further suggestions to try? > > > > > > Thanks, > > > > > > James > > > > > >