[wildfly-dev] Pooling EJB Session Beans per default
Bill Burke
bburke at redhat.com
Mon Aug 4 20:22:16 EDT 2014
I always liked the ThreadLocal pool. No synchronization, little to no
allocations.
On 8/4/2014 6:59 PM, Andrig Miller wrote:
> Considering our benchmarking work through our performance team we have
> actually discovered that we actually need pooling of Stateless Session
> beans, because of memory allocation rates being too high.
>
> Allocating objects is fast in the latest JVM's, that's for sure, but you
> can easily create a situation where the memory allocation rate becomes
> too high, and you start getting excessive GC overhead.
>
> With that in mind, we have recently created (John O'Hara did the work
> from the middle-ware performance team), a new implementation of the
> StrictMaxPool. That implementation uses a ConcurrentLinkedQueue as the
> underlying data structure, as the original used a simple LinkedList with
> synchronization, so essentially all accesses to the pool were
> serialized. So, this didn't scale. The new implementation is upstream
> in Wildfly 9. There is no configuration change necessary, as it
> replaces the old implementation and is compatible.
>
> Like everything, there are tradeoffs, and the mantra that has spread
> recently that pooling is bad, is simply not the case. In some cases,
> allocating an object everytime is the best approach, in others cases
> pooling will be the best approach.
>
> Fortunately, you can do either in Wildfly (and EAP). Like always, you
> have to test your specific application, in the properly configured
> environment to know for sure.
>
> Andy
>
> ------------------------------------------------------------------------
>
> *From: *"Wolf-Dieter Fink" <wfink at redhat.com>
> *To: *"Ralph Soika" <ralph.soika at imixs.com>, wildfly-dev at lists.jboss.org
> *Sent: *Monday, July 21, 2014 11:39:12 AM
> *Subject: *Re: [wildfly-dev] Pooling EJB Session Beans per default
>
> Hi Ralph,
>
> as I said in your community thread
> (https://community.jboss.org/thread/242999) it is not only the
> problem to add a pool for it.
> At the moment there is only the strict-max-pool which limit the
> total number of beans pooled - and also the total number of beans
> which can be used in parallel.
> So that means adding the pool is a performance issue, which can make
> the situation better or worse depend on the application.
> So you need to adjust it depend on your needs.
>
> If there is another implementation of a pool, i.e. which allow to
> have x pooled instances and more if needed, the pool might be back
> as default.
> For the moment it is makes no difference or is faster (in most
> cases) without pooling.
>
> - Wolf
>
> On 21/07/14 18:16, Ralph Soika wrote:
>
> Hi,
>
> I want to discuss the topic of Session Bean Pooling in WildFly.
> I know that there was a discussion in the past to disable
> pooling of EJB Session Beans per default in WildFly.
> I understand when you argue that pooling a session bean is not
> faster than creating the bean from scratch each time a method is
> called. From the perspective of a application server developer
> this is a clear and easy decision. But from the view of an
> application developer this breaks one of the main concepts of
> session beans - the pooling.
> As a application developer I suppose my bean is pooled and I can
> use one of the life-cycle annotations to control my bean. This
> is a basic concept for all kind of beans. First I thought it
> could be a compromise to pool only these beans which have a
> life-cycle annotation. But this isn't a solution.
> Knowing that my bean will be pooled allows me - as a component
> developer - to use this as a caching mechanism. For example time
> intensive routines can also cache results in a local variable to
> be used next time a method is called. This isn't a bad practice
> and can increase performance of my component depending on the
> pool settings.
>
> So my suggestion is to pool also stateless session ejbs in the
> future. I guess form the specification there is no duty to pool
> beans. So there is nothing wrong when not pooling beans. And
> again I don't want to criticize. But at the end not pooling will
> decrease the performance of WildFly. Not the container itself
> but the applications running in WildFly.
> It takes me a long time to figure out why my application was a
> little bit slower in WildFly than in GlassFish until I
> recognized the missing pooling. I can activate pooling and
> everything is cool. But I guess some other application
> developers will only see that there application is slower in
> WildFly than on other application servers.
> And this will effect their decision. That is the argument to
> activate the pool per default.
>
> best regards
> Ralph
>
>
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev
>
>
>
>
> _______________________________________________
> wildfly-dev mailing list
> wildfly-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/wildfly-dev
>
--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
More information about the wildfly-dev
mailing list