0

JSPで作成されたCent OsサーバーにWebアプリケーションがあります。しばらくすると、mysql への接続が制限を超え、アプリケーションは mysql サービスを再起動しないと機能しなくなります。

mysql と tomcat サービスを再起動しても、一部の接続はすでに mysql によって作成されています。

[root@localhost ~]# service tomcat restart

Tomcat のシャットダウン: CATALINA_BASE を使用: /usr/local/apache-tomcat-7.0.27 CATALINA_HOME を使用: /usr/local/apache-tomcat-7.0.27 CATALINA_TMPDIR を使用: /usr/local/apache-tomcat-7.0.27/ temp JRE_HOME を使用: /usr/java/jre1.6.0_10 CLASSPATH を使用: /usr/local/apache-tomcat-7.0.27/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.27/bin/ tomcat-juli.jar

Tomcat の起動: CATALINA_BASE を使用: /usr/local/apache-tomcat-7.0.27 CATALINA_HOME を使用: /usr/local/apache-tomcat-7.0.27 CATALINA_TMPDIR を使用: /usr/local/apache-tomcat-7.0.27/temp JRE_HOME を使用: /usr/java/jre1.6.0_10 CLASSPATH を使用: /usr/local/apache-tomcat-7.0.27/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.27/bin/tomcat -juli.jar

[root@localhost ~]#

サービス mysql の再起動

MySQL をシャットダウンします。[ わかった ]

MySQL を起動しています... [ OK ]

[root@localhost ~]# netstat | grep mysql | トイレ -l

180

上記のように、180 の接続がすべて実行可能であり、接続は次のようになっています。

[root@localhost ~]# netstat | grep mysql

tcp 1 0 localhost.localdomain:49058 localhost.localdomain:mysql CLOSE_WAIT tcp 1 0 localhost.localdomain:49061 localhost.localdomain:mysql CLOSE_WAIT tcp 1 0 localhost.localdomain:49060 localhost.localdomain:mysql CLOSE_WAIT tcp 1 0 localhost.localdomain:49063 localhost.localdomain:mysql CLOSE_WAIT tcp 1 0 localhost.localdomain:49062 localhost.localdomain:mysql CLOSE_WAIT

SQL ファイルを 3 回チェックしましたが、閉じられていない接続はありません

解決策を教えてください...

4

2 に答える 2

3

CLOSE_WAITtcp ソケットの状態は、接続が閉じられている場合は接続が進行中であり、アプリケーションが close() メソッドを実行するのを待っていることを意味します。一部のリソース (データベースへの接続、ファイル IO、ネットワーク接続など) の使用が終了したら、常に close() メソッドを実行する必要があります。

こので、データベース接続を正しく処理する方法を確認できます。

于 2012-10-05T11:09:17.787 に答える
1

アプリケーションのどこかに接続リークがあるように思えます。

Javaで接続がリークする最も一般的な理由の1つは、ブロックにを含めないことfinallyですtry catch

詳細については、この投稿を確認してください。

于 2012-10-05T11:16:36.393 に答える