Hi group --

We have a service that’s doing high volumes of queries using JdbcCompiledQuery. 
On MM 5.0.

Our usage is basically: requests come in via REST, then the following code is 
done, and the result returned. We’re not running queries in a loop or re-using 
JdbcCompiledQuery objects, they just get created and closed and fall out of 
scope after each request. There are multiple threads doing same thing, but 
potentially with different queries.


try (CompiledQuery compiledQuery = dataContext.compileQuery(...) {  // 
dataContext is JdbcDataContext
    result = doExecute(compiledQuery, ...);
}

This closes the compiled-query, which in turn closes the generic object pool 
inside it, which has an evictor / timer thread inside.

The issue we’re observing is under certain heavy loads we start piling up new 
Java timer threads by the thousands, eventually leading to “cannot create 
thread” exceptions. This seems to be timing dependent, probably due to the 
Evictor’s timer and this always-closing of the compiled-query.

So, we’re looking for some guidance on this. For example, what use cases make 
the pool inside JdbcCompiledQuery beneficial?

Our use case doesn’t seem that unusual, and we’ll need to fix it somehow. We 
tried a patched version of JdbcCompiledQuery that doesn’t use an 
object-pool+timer and that seems to fix the thread issue w/o any new negative 
effects.

Thanks much for any advice,
Dana

Reply via email to