Apache.exeが突然の停止

 APサーバとしてOracle iAS(1.0.2.2)を利用していたのですが、いろいろ理由があってServletコンテナとしてTomcatが必要となりました。
 そこで、iAS付属のOracle HTTP Server(Apacheベース)にmod_jk2とTomcatを組み込みました。(サポート外は承知の上での作業です。)
 テスト機では特に問題もなく動作していたので、本番機に同様の設定をしたところトラブル発生です。なんと、一定のアクセスがあるとApache.exeが突然停止しました。
 以下が、その際に出力されたログファイルの内容です。
【error.log】

[Mon Sep 13 08:36:19 2004] [crit] (10038)(FormatMessage failed with code 317): Parent: WSADuplicateSocket failed for socket 288. 
[Mon Sep 13 08:36:19 2004] [error] (2)No such file or directory: master_main: create child process failed. Exiting. 
[Mon Sep 13 08:37:19 2004] [error] forcing termination of child #0 (handle 668)

【jk2.log】

[Mon Sep 13 09:47:45 2004] (error ) [jk_channel_apr_socket.c (488)] channelApr.receive(): Error receiving message body -1 0 
[Mon Sep 13 09:47:45 2004] (error ) [jk_workerEnv.c (492)] workerEnv.processCallbacks() Error reading reply 
[Mon Sep 13 09:47:45 2004] (error ) [jk_worker_ajp13.c (546)] ajp13.service() ajpGetReply recoverable error 120000

 原因を調べいくうちに、テスト機と本番機でApache.exeの更新日付が異なっていることを発見。なんと、テスト機はパッチが全くあたってなかったということが判明しました。(テスト機の再構築作業が中途半端だった。)
 テスト機にパッチをあて、同じ構成にして同時10ユーザ程度の負荷を与え続けたところ本番機で発生した現象が再現しました。
 色々調査しましたが原因はわからず、コネクタをmod_jkに入れ替えてテストを行ったところ問題ないようなので、mod_jk+Tomcatの構成で今は動いています。
 このトラブルの教訓は、以下の通り。

  • テスト機と本番機の同期(パッチ含む)がとれていることを必ず確認すること
  • 十分な運用テスト期間を確保すること
  • サポート外の構成になるような事態に陥らないこと

 基本的なことが守られていなかったということで、情けない限りです。