Tomcat Webアプリをプロキシすると、Apache2リバースプロキシが断続的にフリーズするようです。
問題は、このプロキシされたWebアプリケーションにログインしようとすると、頻繁に(通常は1日に1回または2回非アクティブになった後)、フリーズすることです。アプリケーションは無期限にフリーズし、500応答コードはありません...ブラウザーはただ待機します。
ブラウザからWebアドレスをヒントにしようとすると、最終的には再び機能し始めます。
私は、Tomcatポート8080でWebアプリに直接移動してこの問題を再現しようとしましたが、リバースプロキシを経由しない限り、これを再現することはできませんでした。
これが私のリバースプロキシ設定です...ありがとう
/ etc/Apache2/sites-available/default
ProxyPass /manage/ http://localhost:8080/manage/
ProxyPassReverse /manage/ http://localhost:8080/manage/
ProxyPass /manage http://localhost:8080/manage
ProxyPassReverse /manage http://localhost:8080/manage
/etc/Apache2/mods-available/proxy.conf
<IfModule mod_proxy.c>
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Deny from all
Allow from all
</Proxy>
# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
ProxyVia On
</IfModule>
詳細:(関連するかどうか不明)
有効なApacheモジュール:
core_module(静的)log_config_module(静的)logio_module(静的)mpm_worker_module(静的)http_module(静的)so_module(静的)alias_module(共有)auth_basic_module(共有)authn_file_module(共有)authz_default_module(共有)authz_groupfile_module(共有)authz_auth_module authz_Host_module共有)autoindex_module(共有)cgid_module(共有)deflate_module(共有)dir_module(共有)env_module(共有)mime_module(共有)negotiation_module(共有)proxy_module(共有)proxy_ajp_module(共有)proxy_connect_module(共有)proxy_http_module(共有)reqtimeout_module(共有) rewrite_module(共有)setenvif_module(共有)status_module(共有)
更新:現在、プロキシにajpプロトコルを使用しています。追加のProxyPass構成を設定しました。
ProxyPass /manage ajp://localhost:8009/manage max=20 ttl=120 acquire=10000 retry=0
ProxyPassReverse /manage ajp://localhost:8009/manage
私はajpを使用してApacheからTomcatに接続しようとします。
Tomcatでmod_proxy_ajpを使用して構成をテストしてください。
ログから、TomcatがApacheのリクエストに応答しなかったようです。接続を拒否しました。
トラフィックが多い場合は、アプリケーションのログをより深く検索します。デッドロックまたはmaxthreadsに達した可能性があります。
HTH
Apacheファイルキャッシュが無効になっていることを確認します。
# LoadModule file_cache_module modules/mod_file_cache.so
それでも問題が解決しない場合(解決しないはずですが、これはキャッシュの問題ではないようです)、mod_jkを使用してデバッグしてみてください。 Apacheに適したmod_jkバージョンをダウンロードしてセットアップし、ログレベルをDEBUGに設定します。
# Set the jk log level [debug/error/info]
JkLogLevel debug
また、Apacheログに大量の情報を含める
LogFormat "%h %l %u %t \" %m \"%V\" \"%r \" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D CustomLogFormat
. . .
CustomLog "|C:/Apache2/bin/rotatelogs.exe C:/Apache2/logs/access_%Y%m%d.log 86400" CustomLogFormat
これで、ページを提供するためにマイクロ秒がかかったApacheログと、TomcatへのAJP 1.3接続(mod_jkを使用)のデバッグレベルのログが得られます。
それが終わったら、Apacheを再起動し、強制的にフリーズエラーを発生させます。エラーが発生したら、時間を確認し、ログを参照して、その瞬間に何が起こったか、Apacheが処理に費やした時間などを確認します。
それは何も解決しませんが、おそらく何が起こっているのかについての洞察をあなたに与えるでしょう。
接続が拒否された場合は、Tomcatでmaxthreadカウントに達している可能性があります。 Apacheのmaxclientは何に設定されていますか? Tomcatで設定されているmaxthreadは何ですか? maxclientがmaxthreadを超えないようにする必要があります。そうでない場合、ApacheはTomcatが提供できるよりも多くの接続をプロキシしようとし、Tomcatは接続を拒否します。
またあなたがretry=0
ProxyPassステートメントの最後まで、Apacheはバックエンドワーカーを無効にしません。この問題が発生したときの回復はより速くなります。