数分後にハングする Web アプリケーションがあります。基本的に、これは非常にカスタマイズされたフォームを作成およびプレビューするためのアプリケーションであり、数分間の集中的なユーザー操作の後、アプリケーションは動作を停止します。これは、要求が完了し、応答が返されないことを意味します。
Tomcat のログやアプリケーションのログにもハングに関する手がかりが見つからないため、「少し」迷っています。lambda/psi-probe を使用しているため、アプリケーション サーバーは実行されており、他のアプリケーションや面倒なアプリケーションも問題なくチェックできます (プローブ自体は別の Web アプリケーションです)。
アプリケーションは、長い間正常に動作していた休止状態を使用していますが、最近、パフォーマンスを向上させるために (休止状態のみを使用する場合、休止状態は多くのクエリを挿入します)、java.sql 標準 API を介してネイティブ SQL を導入しました。私は両方を混在させないように注意しており、それらは jsp でのみ使用されます。最初に休止状態でいくつかの (少数の) オブジェクトを取得し、次に jdbc でいくつかのロジックを使用します。jdbc を使用する前に、Hibernate セッションが閉じられます。
データベース接続の問題 (何度か確認しましたが、データベース サーバーは正常に動作しています)、デッドロックまたはランナウェイ スレッドについて読んだことがあります。VisualVM で VisualVM を使用して確認しました。
では、誰でもハングを見つけたりトラップしたりする手がかりを与えることができますか? 仮想のランナウェイ スレッドまたはデッドロックをキャッチまたはトラップするために VisualVM を使用する手がかりを得ることができますか? 待機中のスレッドと実行中のスレッドが表示されるだけなので、後者は私を啓発します。
私は tomcat 6.0.21 を使用しています (私は常に同じ結果で 7.0.11 を試しました) Mac osx および Linux (開発および試作マシン) で Java 1.6
どんなアイデアでも大歓迎です。
ウィリー