2011-06-25 4 views
1

SQLState relac: 08S01, thread:0JDBCのERROR:08S01は時々

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. ... more

Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.(Socket.java:375) at java.net.Socket.(Socket.java:218) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:294) ... 20 more

を起こる、私はN個のスレッドで作業し、それが特定の時間にだけ時々ではないが起こる(X分)

私はdiferentドライバでみてくださいしかし、私は、問題を解決することはできません。

+0

Windowsを使用している場合は、https://support.microsoft.com/en-us/kb/196271 – Megaprog

答えて

2

あなたは

  1. はソケットを開くと、それらを閉じていないいずれかの最も可能性が高いです。時間が経つとオープンソケットの数が多くなり、アプリケーションがクラッシュします。
  2. あなたはあまりにも多くのソケットを同時に開いています。たぶん、スレッドがたくさんあるからです。

私はそれが#1だと推測します。コードを再確認し、ConnectionオブジェクトとResultSetオブジェクトをすべて閉じてください。

#2を実行している場合は、(スレッドが多すぎる特定のポイントが正常よりも悪い場合は)より少ないスレッドを使用するか、c3p0のような接続プールを使用して、あなたのスレッドがそれらを共有できるようにします。 c3p0を使用することは一般的には良いアイデアであり、#1をより速く検出できるようにする必要があります。

第3の選択肢は、JPAまたはJDOなどの高レベルの抽象化を使用して、接続管理を担当することです。

+0

で解決できる場合があります。お手数ですが、結果セット、ステートメント、コネクション私はc3poを使用しましたが、エラーはまだ残っています:( 私は3つまたは4つのスレッドしか使用していませんでしたが、多くのトランザクションを行います。 –

+0

Hey Pace、私の間違い、私はc3p0でもう一度やり直してください。 ... どうもありがとう –

0

私の場合は、JbossSeamフレームワークに基づくJBossサーバー上でMsSQLサーバーとアプリケーションを使用しています。 このエラーは、hibernateとhsqldbのバージョンが一致していないことが原因です。ライブラリとエラーの両方の最新バージョンの更新を試みることはなくなります。例えばhibernate 4.3.6.finalは、hsqldbバージョン2.2.9と完全に互換性があります。 このようにして