1



TomcatJDBC Lib を使用して Tomcat 6 と MySQL で実行している、このような厄介な問題に直面しています。

com.mysql.jdbc.CommunicationsException: 

基礎となる例外による通信リンク障害:

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1934)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2380)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2909)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3026)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1137)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1231)

しばらくすると (20 分)、これが発生し、db へのすべての接続が期限切れになるようです。

autoReconnect=true" 
validationQuery="Select 1"

すべてが設定されています。
私はデータベースへの再接続を処理しますが、正常に動作しますが、巨大なログ ファイルは問題があります。この例外を処理してサイレントにすることもできません。また、このタイプの「修正」は正しい解決策ではありません。次の方法はありますか:
a) この例外をサイレントに処理する
b) この問題を修正する (私が知っているファイアウォールはありません) (mysql 構成のために my.cnf にアクセスできません)

また、接続をドロップする可能性のあるファイアウォールなしで、まったく異なるアプリケーションで Apache jConnector を使用する Tomcat 5 でもこの問題が発生します。

(接続を呼び出すメソッドで EOFException または CommunicationsException をキャッチしても、もちろん役に立ちません。)

前もって感謝します。

4

3 に答える 3

2

a) MySQL db サーバーとアプリケーション サーバー (Tomcat またはその他) を停止します。

b) Mysql 設定: これは、mysql フォルダーの下の「my.ini」ファイルで行う必要があります。

wait_timeout = 1200 (つまり、20 分 – ファイアウォールまたは他のサードパーティ ソフトウェアと同じ時間を維持します)

上記のクエリでDBレベルを設定できます。set wait_timeout = 1200;

上記のクエリで設定を表示 'wait_timeout' などの変数を表示 ;

c) 「Torque.properties」ファイルに 2 つのプロパティを追加します。

minEvictableIdleTimeMillis 接続がプール内でアイドル状態を維持できるミリ秒単位の時間

    torque.dsfactory.csa.pool.minEvictableIdleTimeMillis = 1100000

#timeBetweenEvictionRunsMillis エビクション スレッドの実行間のミリ秒単位の時間。0 より大きい必要があります。デフォルトは -1

  torque.dsfactory.csa.pool.timeBetweenEvictionRunsMillis = 2000


    d) Start application and db server
于 2013-06-13T07:20:20.153 に答える
1

リソースの server.xml ファイルで MaxIdle および Timeout プロパティを設定する必要があります。

于 2012-10-25T06:18:46.690 に答える