読者です 読者をやめる 読者になる 読者になる

アタシ ポンコツ システムエンジニア

新卒ポンコツSEの成長を描く(予定の)感動のスペクタクル超大作

MySQL JDBCではコネクションを繋いだり切ったりしてはいけない

現象

先日こんな例外に遭遇しました。

java.lang.IllegalStateException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).

発生環境

インサートをする際にその直前と直後にコネクションの接続と切断をするような
ソースを書いていました。。

インサートは数1000件レベルで発生します。。
めちゃくちゃ重くてパソコン止まりそうになりました…

原因

これの原因についてまとめている方がいらっしゃいましたので紹介します。。

どうやら原因は切ったり繋いだりを連続させて発生させてしまったこと。

プログラムの最初と最後に一回ずつ接続・切断を行うように書き換えたところ
問題解決と同時にプログラム自体の動作も劇的に改善されました!

教訓

  • MySQL JDBCではコネクションを繋いだり切ったりしてはいけない

以上。。