apache22

公開 Web プログラムの試験サーバ環境の Apache をバージョン 2.2.3 にした。公開サーバでは 2.0.53 である。Apache-2.2 は mod_proxy_ajp モジュールがサポートされ,Tomcat の連携設定がこれまでよりずっと容易になった。

misima や Web アクセスカウンタなどを新バージョンで試験した。プーシキン電子コンコーダンス・プログラムで問題が出た。途中で出力が停止し,CGI がタイムアウトしてしまうのである。エラーログを確認すると,"(70007)The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed, referer:..." が出力されている。公開サーバでは同じフォーム入力条件でも問題なく処理される。Apache2.2 は何か特別な設定が必要なのかと考え,インターネットを探しまわったが得られなかった。

基本に戻ってプログラムの所々に網を張ってデバッグしたところ,果たして潜在バグであった。STDOUT と STDERR をひとつのファイルにリダイレクトすると,データの並びがプログラムの出力順序のとおりになるとは限らない。STDERR を捨てる対策を施したところうまく動作した。

もう何年も動かしているプログラムだったので Apache の設定の問題と考えてしまったが,やはり「汝自身を疑え」というわけである。