2009-07-10 15 views
4

私は別のマシンのjbossへのリクエストを処理するためにあるマシンでApacheを使用しています。スタートアップjbossを起動してWebアプリケーションにアクセスするとすべてうまく動作しますが、数時間後には「プロキシサーバーがアップストリームサーバーから無効な応答を受信しました」というエラーが発生します。私がjbossを再起動すると、すべて正常に動作しますが、数時間後に同じ問題が発生します...502不正なゲートウェイ...上流のサーバー(apacheとjboss)からの無効な応答

誰でもこの問題の原因を知っていますか?私はこの時点で(私は数時間で)は、Apacheのログにアクセスする必要はありませんが、jbossを再起動すると一時的な修正ですので何かであるようです。

mod_jkでjboss4.2.3とApache 1.3を使用しています。私はjbossのログに何の誤りも見つけていないし、私が手を差し伸べようとしているアプリは長い時間がかかることはしていない。メインページは単純なログインページです。私はアプリケーションサーバーとWebサーバー間の通信用にポート8009と8080を開いています。どのような設定が間違っているのか分かりません。

+0

問題は、アプリケーションサーバーの設定ファイルが、Webサーバーのmod-jk設定と同じ設定ではないことでした。問題は少し前に解決されたので、私はそれが何であるか正確に覚えていないが、私はそれがタイムアウトの問題であると確信している、とスカフマンは言った。私はmaxThreadsとminThreadsが両者で同じ設定になっていなかったことを覚えています。 – ravun

答えて

6

Apacheのmod_jkがJBossのAJPコネクタと同期しなくなっているようです。 AJPプロトコルでは、Webサーバーとアプリケーションサーバー間の永続的な再利用接続が使用され、接続の両端でプロトコルが完全に同じに設定されていないと、接続の一方の端で接続が無効になりますが、それらを使用しようとし続けます。症状は502エラーです。

私の最初の提案はこれです:必要がない限り、mod_jkは使用しないでください。複雑で、安定したシステムを構築するのは難しいです。パフォーマンスや負荷分散機能が必要ない場合は、代わりにmod_proxyを使用することをお勧めします。これは、ほとんどのアプリケーションと同じくらい簡単で、かなり簡単です。

しかし、mod_jkに固執したいのであれば、まず最初に、mod_jkの最新バージョン(現在は1.2.28)を使用していることを確認してください。幸いにも、mod_jkはApache 1.3でも引き続きサポートされています。

次に、mod_jkログファイル(JkLogFileディレクティブを使用して設定)を確認します。何かがうまくいかないときに接続関連のエラーがたくさんある場合は、接続の両端でjk configを微調整する必要があります。最も可能性の高い原因はタイムアウトの設定です(read up about those here)ので、両端が同じ賛美歌シートから歌われていることを確認してください。

2

また、これはapacheとtomcatを使用して発生しています。私の特定の状況では、Tomcatにデプロイされたアプリケーションには、応答スレッドがハングアップするバグがありました。最終的にTomcatはワーカースレッドを使い果たし、Apacheは接続を確立できませんでした。

この例では、データベース接続が接続プールに正しく戻されず、ほかのスレッドが無期限にプールから接続を取得するために待機していました。しかし、応答処理スレッドを無期限に生き残らせるものであれば、同じ問題が発生する可能性があります。

+0

コードを再チェックしたところ、スレッドが開いたままになっているようには見えませんでしたが、それは覚えておくと良いことです。 私はそれがskaffmanが言及したmod_jkの問題だと確信しています。私はいつもjbossマシンのアドレスを使ってサイトにアクセスすることができます。それはエラーを受け取ったときにApacheにアクセスしようとしているときです。 – ravun

+0

mod_jkの設定の一部を編集しようとしましたが、問題は解決しません。設定は非常に基本的なもので、なぜそれが問題の原因になるのかはわかりません。 サイトのタイムアウトが再び始まった後、私はアプリケーションサーバー上のネットワークトラフィックをチェックし始め、ポート8009に多数の "ESTABLISHED"接続が表示され、30分後には閉じられません。だから、あなたが恥ずかしそうにした問題かもしれないように見えます。 私は自分のデータベース接続を調べましたが、使用した後で接続を閉じるので、他に何が問題の原因になっているのか分かりません。それは別のものになることができますか? – ravun

0

私はApacheとGlassfishと同じ問題を抱えていました。最後に、両サイドで同じタイムアウトを設定するように修正することができました。 Glassfishので

リスナーの構成を変更し、Apacheにこの行でworker.propertiesを変性する:

worker.worker_name.socket_timeout=300

私は、JBossでこれを設定する方法について確認していない、web.xmlかを変更することができますcluster-service.xml