HTTP (POST/GET/etc) リクエストへの応答に (時々) 長い時間がかかる Web アプリケーションを想像してみてください。サーバー側でそのようなリクエストをどのように見つけますか?
これまでのところ、Tomcat AccessLogValve を使用して「完了した」リクエストを確認しましたが、「進行中」(スタック)のリクエストを確認することはできません:(
例えば:
現在スタックし
netstat
ているリクエストの数を知ることができる長寿命のソケットを特定できますが(URIではありません)、HTTPキープアライブはこのアプローチを無効にしますapp-server (
kill -3 <server_pid>
) を複数回スタックダンプし、どのスレッドが長時間実行されているかを推測し、URI をリバース エンジニアリングすることもできますが、これも賢明な方法ではありません。現在実行中の呼び出しを表示するWebアプリサーバーの前にルーター/プロキシを挿入できます(ホスト名の置き換え、証明書のクローン)-単純なアプローチではありません
継続的に実行し、トラフィックを解析して現在実行中の URI のリストを保持するだけに陥る可能性が
tcpdump
ありますが、その場合、httpsS はどうすればよいでしょうか?私が見つけた最も近いのは tomcat7 のStuckThreadDetectionValveで、これは長時間実行されている呼び出しを定期的に報告しますが、(URI ではなく) スタックトレースを出力し、「ライブ」データを提供しません (たとえば、定期的にポーリングし、ログをフラッディングし、状態を確認できるようにします) 1 ~ 60 秒前、「今」ではありません)
たぶん、重要/コア/基本的なTomcat機能の1つが欠けている/見落としているのでしょうか? それとも、weblogic (または他のアプリケーションサーバー) がこれに対して提供する堅牢なものを持っているのでしょうか?
このようなシンプルで本質的な機能がないと、ちょっと迷ってしまいます。ヘルプ?お願いします?