既存のサーブレット ベースのアプリケーション (少し古いアプリケーション) で奇妙な問題が発生しています。
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 を実行しています。
この動作の原因を特定することはできません。どうもありがとうございました。