nimana – weblog

MySQL Communications Link Failure

leave a comment »

Recently we were baffled by the “Communications Link Failure” issue on our servers.

Our setup:

Jahia 6 on Tomcat (Apache DBCP, Spring, Hibernate, MySql).

Here’s what we observed:

1. The exception is generally caused by a connection that has become stale. The connections in the pool become stale after the wait_timeout period set in the my.cnf on the mysql server. The pool implementation should somehow validate connections before using them (which is what validationQuery is for).  However, setting validationQuery has performance side effects.

2.     Setting the autoReconnect (jdbc:mysql://DBHOST/schema?autoReconnect=true) to true on the driver should try to reconnect in case the connection has become stale each time a connection is made. However, this has no effect anymore and can be removed.

After trying a few other options, what helped us was setting the “wait_timeout” value in the my.cnf to a high value. (Some value greater than the max amount of inactivity in the system).

If the wait_timeout is set to a high value so that during the period of inactivity the connections do not become stale, this exception will not be raised.

Of course, the other option is to handle stale connections in your code and recover from such exceptions or use a connection pool implementation that does this for you.

Advertisements

Written by nimana

March 30, 2010 at 2:48 pm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: