[wildfly-dev] Pooling EJB Session Beans per default
Jason Greene
jason.greene at redhat.com
Wed Aug 6 11:43:11 EDT 2014
On Aug 6, 2014, at 10:18 AM, John O'Hara <johara at redhat.com> wrote:
> On 08/06/2014 03:47 PM, Andrig Miller wrote:
>>
>> ----- Original Message -----
>>
>>> From: "Bill Burke" <bburke at redhat.com>
>>>
>>> To: "Andrig Miller"
>>> <anmiller at redhat.com>
>>>
>>> Cc:
>>> wildfly-dev at lists.jboss.org, "Jason Greene" <jason.greene at redhat.com>
>>>
>>> Sent: Tuesday, August 5, 2014 4:36:11 PM
>>> Subject: Re: [wildfly-dev] Pooling EJB Session Beans per default
>>>
>>>
>>>
>>> On 8/5/2014 3:54 PM, Andrig Miller wrote:
>>>
>>>>> Its a horrible theory. :) How many EJB instances of a give type
>>>>> are
>>>>> created per request? Generally only 1. 1 instance of one object
>>>>> of
>>>>> one
>>>>> type! My $5 bet is that if you went into EJB code and started
>>>>> counting
>>>>> how many object allocations were made per request, you'd lose
>>>>> count
>>>>> very
>>>>> quickly. Better yet, run a single remote EJB request through a
>>>>> perf
>>>>> tool and let it count the number of allocations for you. It will
>>>>> be
>>>>> greater than 1. :)
>>>>>
>>>>> Maybe the StrictMaxPool has an effect on performance because it
>>>>> creates
>>>>> a global synchronization bottleneck. Throughput is less and you
>>>>> end
>>>>> up
>>>>> having less concurrent per-request objects being allocated and
>>>>> GC'd.
>>>>>
>>>>>
>>>> The number per request, while relevant is only part of the story.
>>>> The number of concurrent requests happening in the server
>>>> dictates the object allocation rate. Given enough concurrency,
>>>> even a very small number of object allocations per request can
>>>> create an object allocation rate that can no longer be sustained.
>>>>
>>>>
>>> I'm saying that the number of concurrent requests might not dictate
>>> object allocation rate. There are probably a number of allocations
>>> that
>>> happen after the EJB instance is obtained. i.e. interception chains,
>>> contexts, etc. If StrictMaxPool blocks until a new instance is
>>> available, then there would be less allocations per request as
>>> blocking
>>> threads would be serialized.
>>>
>>> Whoever is investigating StrictMaxPool, or EJB pooling in general
>>> should
>>> stop. Its pointless.
>>>
>>>
>> Ah, no its not pointless. We have a new non-blocking implementation of StrictMaxPool, and its upstream in Wildfly 9, and will be in EAP 6.4. It has helped us increase our throughput, and reduce response times alot!
>>
>> Andy
>>
> Some contextual numbers around what Andy is describing. These are results from one of our benchmarks;
>
> Average response times (28600 concurrent users)
> Pooled
> Non-pooled
> Remote EJB invocations
> 0.114s 2.094s
> WS invocations
> 0.105s 0.332s
> HTTP web app invocations
>
>
> HttpCallTypeA
> 0.090s 5.589s
> HttpCallTypeB 0.042s 2.510s
> HttpCallTypeC 0.116s 7.267S
I love data, thanks :) Have you by chance taken object histogram samples for these two? It would be useful to see how strong the correlation is, and if a use-pattern shows up in the benchmark that leads to a non-pool implementation creating massive amounts of objects (like the loop scenario I mentioned)
--
Jason T. Greene
WildFly Lead / JBoss EAP Platform Architect
JBoss, a division of Red Hat
More information about the wildfly-dev
mailing list