- PR -

Internal Server Error が頻発することについて

1
投稿者投稿内容
くま
会議室デビュー日: 2003/06/19
投稿数: 7
投稿日時: 2004-02-04 15:35
よろしくお願いします。

Apache + Tomcat の環境で、ページにアクセスすると、
たまにApacheが「Internal Server Error」を返してきます。
その後ページを読み込みなおすと、通常どおり表示ができます。
環境は以下です。

Apache 2.0.48
Tomcat 4.1.24
mod_jk2 2.0.2

ログは以下の辺りがあやしいです。

[Wed Jan 28 16:42:54 2004] [error] lb.getWorker() reenable ajp13:jni
[Wed Jan 28 16:42:58 2004] [error] lb.service() worker failed 120000 for ajp13:jni
[Wed Jan 28 16:42:58 2004] [error] lb.service() unrecoverable error...
[Wed Jan 28 16:42:58 2004] [error] mod_jk.handler() Error connecting to tomcat 120000

mod_jkで何か失敗してそうなのは分かるのですが、対処の仕方がわかりません。
予想ですが、マシンスペックやネットワーク状況が関係しているようにも思えます。
ネットで調べてみましたが、結構この手の質問は放置プレイされてるものが多く、
エラーの解決方法まで見つけることができませんでした。

この「Internal Server Error」はどうしようもないのでしょうか?
それとも、簡単すぎて無視されてるのでしょうか?

アドバイスお願いします。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-02-05 10:52
たまにとは、Apache,Tomcatを起動した直後の
アクセスですかね?
それとも運用中に出たり出なかったりですか?

起動直後に、contextがロードしきっていない
状態でアクセスするとエラー出たりしますけど。
くま
会議室デビュー日: 2003/06/19
投稿数: 7
投稿日時: 2004-02-05 15:36
お返事ありがとうございます。

説明不足で申し訳ありませんでした。
エラーが出るのは運用中です。
Apache,Tomcat起動直後ではありません。

アクセスが集中したときにエラーがよく出てるようですので、
mod_jk2の方で処理が追いついてないのかなというのが私の印象ですが。。
現状では、javascriptでフレームを監視し、Internal Server Errorが
出てるようならそのフレームは再読込みさせることで何とか凌いでいます。
ただ、ページを見る側からすると「なんだいまのエラー表示は?」といった
感じを受けるようです。

ただ1分おきぐらいに以下のようなエラーも出ています。

2004/02/05 15:28:21 org.apache.jk.common.ChannelSocket processConnection
情報: connection timeout reached

しかし、これは「たいして気にしないでよい」という記述を見かけたので特に
気にとめてませんでしたが、もしかしたら関係しているのでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-02-05 15:57
ちょっとうろ覚えなのですが、Worker スレッドが足りていない場合に同じような現象に陥ったことがあります。
Tomcat 側で mod_jk の処理をするスレッドを増やしたら直ったような・・・。
くま
会議室デビュー日: 2003/06/19
投稿数: 7
投稿日時: 2004-02-06 13:44
> Tomcat 側で mod_jk の処理をするスレッドを増やしたら直ったような・・・。

ご助言ありがとうございます。
その後以下のようにserver.xmlをいじってみたのですが、相変わらずエラーは出ています。

<Connector>要素 ※HTTP/AJP1.3双方とも
enableLookups "true"→"false"
maxProcessors "75"→"150"
connectionTimeout "200000"→"-1" ※Tomcatのコンソールに出ていた"connection timeout"は消えました
以下新規追加
<Parameter name="max_threads" value="500"/>
<Parameter name="max_spare_threads" value="50"/>
<Parameter name="min_spare_threads" value="20"/>
<Parameter name="backlog" value="300"/>

<Context>要素
reloadable "true"→"false" ※これ常識だそうで。。処理が軽くなりエラーの頻度が減りました

クライアント1台にしてもエラーは出ており、なぜかほぼ3回に1回の割合で発生しています。
外部ファイル(画像ファイルやcssファイル等)の量に関係してるような気もしています。
このアプリケーションの性質上、画像ファイルの数はどうしようもありません。

他に改善するべきところはありますでしょうか?
まだ勉強不足ですので、「ここを勉強したらいいかも」といったご助言でも結構です。
それとも、ApacheはあきらめてTomcat単独の運用にした方がいいのでしょうか。

# 次はworkers2.propertiesの方を調べてみます
くま
会議室デビュー日: 2003/06/19
投稿数: 7
投稿日時: 2004-02-07 17:18
解決しました。

workers2.propertiesのロードバランサやjniワーカの設定部分が悪さをしてたようです。
これらの記述を削除したら、エラーも出なくなりました。

ネット上にあったworkers2.propertiesを、内容も確認せずに使っていたことが原因です。
(ロードバランサやjniワーカというのも今日初めて知りました)

今となって考えたら、
[error] lb.getWorker() reenable ajp13:jni
[error] lb.service() worker failed 120000 for ajp13:jni
のログはまさしくこのことだったんですね。

どうもお騒がせしました。
1

スキルアップ/キャリアアップ(JOB@IT)