Software caused connection abort: recv failed
mcaughey Oct 29, 2005 1:59 AMI have an application running on JBoss 4.0.2 using Hibernate 3.0 and MySQL Connector 3.1.10 all using the 1.5_04 JDK.
I'm seeing this on Windows XP with MySQL 4.0.26 and RedHat Linux 7.1 with MySQL 3.23.58.
I'm getting the following stack trace:
java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0( 01:21:46,709 INFO [STDOUT] Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:105) at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:148) at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:176) at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1899) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2348) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2858) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665) at com.mysql.jdbc.Connection.execSQL(Connection.java:2978) at com.mysql.jdbc.Connection.execSQL(Connection.java:2902) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:930) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1024) at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120) at org.hibernate.loader.Loader.getResultSet(Loader.java:1272) at org.hibernate.loader.Loader.doQuery(Loader.java:391) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218) at org.hibernate.loader.Loader.doList(Loader.java:1593) at org.hibernate.loader.Loader.list(Loader.java:1577) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395) at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74) at com.caughey.gameman.db.GameDB.getGameList(GameDB.java:79)
Here's the configuration I'm using to configure my Datasource:
<datasources> <local-tx-datasource> <jndi-name>GameManagerDS</jndi-name> <connection-url>jdbc:mysql://localhost:3306/gameman?autoReconnect=true</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>myuser</user-name> <password>mypassword</password> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <idle-timeout-minutes>5</idle-timeout-minutes> <exception-sorter-class-name>com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter</exception-sorter-class-name> <valid-connection-checker-class-name>com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker</valid-connection-checker-class-name> <new-connection-sql>select count(*) from Game</new-connection-sql> <check-valid-connection-sql>select count(*) from Game</check-valid-connection-sql> </local-tx-datasource>
MySQL Time out variables are set accordingly:
connect_timeout = 5 interactive_timeout = 28800 wait_timeout = 28800
I've googled, I've search these forums, reviewed the books Mastering MySQL 4 and JBoss 4.0 Official Guide to no avail.
It only happens after a night of the application sitting idle. So I suspect one of the two 8 hour (28800) settings are kicking in. How ever, according to everything I've read the autoReconnect=true and setting the idle-timeout-minutes should do the trick. Well it hasn't. Is there something i'm missing. I did see that I should set the 28800 settings to 50000. Setting longer isn't going to help. I may even want to set them shorter in which case I could expect the connections to go away faster.
Any help will be appericiated.
Thanks,
Michael