This is an interesting find Hans.
Has anyone noticed, or tested, this with other databases (ie other
than MySQL which is what Hans mentions testing with)?
The big question in my mind is do we turn it off altogether, or make
it a configurable option with recommended settings for different
databases?
If anyone can take a peek at their system(s) and offer feedback that
would be great.
-David
On Jan 31, 2008, at 12:37 AM, Hans Holmlund wrote:
I have just upgraded to the latest version of Entity Engine and
stumbled upon a problem. The problem I had was that db-connections
were dropped after awhile but without actually closing the TCP
session with the database. So when I checked with netstat I had a
lot of connections in a CLOSE_WAIT state. I'm using MySQL but I
guess this may happen with other databases too.
I had a look in the code and come up with a fix. In
DBCPConnectionFactory (row 96) there is a line saying:
pool.setTimeBetweenEvictionRunsMillis(600000);
In GenericPool to set this parameter has the effect of creating an
eviction thread, so every 10 minutes the pool will be checked if
there exist any unused objects. The problem seems to be when the
object is evicted, I'm not sure what is happening but the object is
not correctly removed.
I don't think that this cleaning procedure is necessary, if I have
set the pool-maxsize to 200 I can probably live with that the actual
pool-size never shrinks.
So I made this change:
pool.setTimeBetweenEvictionRunsMillis(-1);
The eviction thread will not be created. And after I made this
change I have not had any problems with stale DB-connections.
/ Hans Holmlund