1

既存のサーブレット ベースのアプリケーション (少し古いアプリケーション) で奇妙な問題が発生しています。

mysql の準備済みステートメントの実行速度が 10 秒未満の場合、サーブレットの操作を完了できません (このアプリには準備済みステートメントしかありません)。

より高速なクエリ (10 秒未満) に問題はありません。

catelina.out にはトレースもブラウザ インターフェイスもありません。フィドラーを介してブラウザリクエストを検査すると、それが表示されます

「このセッションはまだ完了していません。更新された統計のためにセッションが完了したら、F5 キーを押して更新してください。リクエスト数: 1 送信バイト:
437 (ヘッダー:437; 本文:0) 受信バイト: 0 (ヘッダー:0; 本文:0) "

MySQL の「SHOW FULL PROCESSLIST」コマンドは、COMMAND="Execute" および STATE="Sending Data" で約 12 秒間実行された特定のソケット接続 (遅いクエリの) を示し、その後、COMMAND="Sleep" および STATE="" に変更されます。この状態が長時間 (500 秒以上) 続きます。理想的には、この接続は長時間 SLEEP のままではなく、データの送信が完了した後に閉じる必要があります。

netstat -ab コマンドは、tomcat6.exe および mysqld.exe の下で ESTABLISHED と同じ接続を示します。理想的には、これは、クエリの実行が終了してから「TcpTimedWaitDelay」値まで TIME_WAIT のままにする必要があります。

このクエリの予想されるペイロードはごくわずかです (約 2k バイト)。

MySQL connect_timeout=100 および Tomcat connectionTimeout="100000" (アプリを実行しているポート 8000 の場合)。

JDBC DriverManager.setLoginTimeout プロパティを変更しようとしなかったのは、接続を取得するまでしか関係がないためです。

このアプリは、数日前まで非常にうまく機能していました。しかし、当時のクエリ実行時間に関する統計はありません。

Windows 2008 R2 std エディション、tomcat 6、および MySQL 5.5 を実行しています。

この動作の原因を特定することはできません。どうもありがとうございました。

4

1 に答える 1

1

MySQLコネクタに関連する問題のようです。古いコネクタ (バージョン 3.1.x) を使用していました。最新の安定版 (5.1.20) で問題が修正されました。

于 2012-05-11T11:42:33.193 に答える