konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


Old/Zend Server/IBMi

Zend Server for IBM i:: エラーログやメッセージに関する FAQ

  • この情報の対象は、Zend Server for IBMi の下記のバージョンです。
    • Ver 5.0.1 日本語版
    • Ver 5.1.0 日本語版
  • 下記のバージョンは対象外です
    • Ver 5.1.1 以降のすべて
    • Ver 5.1.0 以前の 英語版 のすべて

IBM HTTP Server のメッセージと対策

下記のようなメッセージが /www/zendsvr/logs/error_log.(システム生成の文字列) に出力されることがあります。

  • 正常なメッセージの例
    • IHS 起動時に出力されます。
      • [notice] Using [Zend Enabler module, Version(以下略)
      • [notice] ZSRV_MSG0385: Apache(以下略)
    • IHS 終了時に出力されます。
      • [notice] ZSRV_MSG0387: SIGTERM の受信。 シャットダウン中。
  • 実は正常なメッセージの例
    これらは、結果的にエラーとして記録されたメッセージです。
    • もともと存在しない favicon ファイルをブラウザが表示しようとしたため発生。
      アイコンファイルや favicon ファイルを表示しないようにブラウザを設定すると、結果的にこのメッセージは減ります
      設定できるかどうかはブラウザの種類に依存します。
      • [error] ZSRV_MSG0018: ファイル /www/zendsvr/htdocs/favicon.ico が存在していません
      • [error] ZSRV_MSG0016: 要求 GET /favicon.ico HTTP/1.1 の URI が正しくありません
    • index.html または index.php が存在しないディレクトリーをブラウザで表示しようとしたため発生。
      • [error] ZSRV_MSG0356: mod_autoindex: 規則によって禁止されているディレクトリー索引(以下略)
  • 異常なメッセージの例
    • [warn] Cannot send HTTP response errno=0
    • [warn] Cannot send HTTP response errno=3455
    • [error] Can not connect() to /usr/local/zendsvr/bin/php-cgi.bin (0.0) - [3425]
    • [error] Can not send request to /usr/local/zendsvr/bin/php-cgi.bin (0.0) - [3426]
    • [error] Can not read response from /usr/local/zendsvr/bin/php-cgi.bin (0.0) - [3447]

異常なメッセージが発生する場合、IBM Fix Central を下記のテキストで検索してください。
検索結果のうち、ログファイルに関連する PTF 番号を適用してください。

  • Fast CGI
  • HTTPSVR

2012/8/7 時点では、下記の PTF が利用できます。

  • 内部ライセンスコード
    • V5R4M0 : MF53779
    • V5R4M5 : MF53780
    • V6R1M0 : MF53775
    • V6R1M1 : MF53781
    • V7R1M0 : MF53782
  • Portable App Solutions Environment関連
    • V5R4M0 : SI43793 (SI36004 は置換されます)
    • V6R1M0 : SI43795 (SI36005 は置換されます)
    • V7R1M0 : SI43798
  • IBM HTTP Server for i(IHSの正式名称)関連
    • V5R4M0 : SI43221 (SI36026 は置換されます)
    • V6R1M0 : SI43224 (SI36027 は置換されます)
    • V7R1M0 : SI43222 (SI37065 は置換されます)

PTF を適用しても解決しない場合、error_log.(システム生成の文字列) に対応する access_log にヒントが見つかる場合があります。

  1. error_log 内で下記が発生する時刻を秒単位で調べます。
    • [error] Can not send request to /usr/local/zendsvr/bin/php-cgi.bin (0.0) - [3426]
    • [error] Can not read response from /usr/local/zendsvr/bin/php-cgi.bin (0.0) - [3447]
  2. それぞれの発生時刻から一定時間以内に下記の3桁のコードが access_log に出現しているか調べます。
    さかのぼる範囲はほとんどの場合1分以内です。
    HTTP/1.1 の直後に引用符がはさまる場合もあります。
    • HTTP/1.1 4xx (xx は任意の数字)
    • HTTP/1.1 5xx
  3. 特定のコードが、特定の PHP スクリプトで集中して発生している場合、その PHP スクリプトを調査します。
    • 調査すべき内容は、この3桁の HTTP ステータス・コードに依存します。
      各コードの意味については、例えばStudying HTTP などで説明が見つかります。

スプールや MSGQ に見つかる、EASYCOM が Unregistered copy だというメッセージが気になります。

これはエラーではなく、AURA社が配布する PHP Toolkit For IBM i による通知メッセージです。
Toolkit For IBM i は Zend Server for IBM i で同梱されている i5関数部分です。
ユーザー登録(www.easycom-aura.com/en/registration_php.asp)により
Unregistered な状態を解除することができました。(少なくとも 2012年春ごろまで)

  • 少なくとも 2012/11/30 には上記のアドレスは削除されています。
  • 新しいアドレスにユーザー登録が移転したようですが、2013/04 現在、Ver 5.1 用のライセンスを入手不能との情報が入っております。
    そのため新しいアドレスのご案内は控えさせていただきます。
    また、ユーザー登録の代行作業はお受けいたしかねます。
  • 下記の情報については、2012年前半に確認した内容となります。
    2013 年以降については、下記が参考になることを保証いたしかねます。 必須ではありませんので、
    絶対に気になる場合のみユーザー登録されるとよいでしょう。
    いくつかの入力欄について説明を記載します。
  • Title: Mr(男性)/Ms(未婚女性)/Mrs(既婚女性)
  • First name: 姓名のうち、名の部分です。
  • Last name: 姓名のうち、姓の部分です。
  • Phone: +81-3-1111-2222 のように国番号から書きます。次に市外局番と電話番号を続けます。市外局番の最初のゼロは取ります。
  • State: 入力は不要です。アメリカなど州に分かれている国で使います。
  • Fax: Phone と同じ要領です。

ドキュメントルートに追加したディレクトリにアクセスすると禁止と表示されます

下記の2点を確認してください。

  1. 追加したディレクトリに対して、IHS既定のユーザーによる読み取りと実行が可能であること。(書き込み権限は任意です)
  2. index.html または index.php が存在すること。
    このファイル名は /www/zendsvr/conf/httpd.conf の DirectoryIndex ディレクティブの値として指定されています。

しばらくすると、php のエラーログに Too many open files が出力されます

i5_connect 関数の内部で、コードページファイルの処理が正しく行われていない可能性があります。
このメッセージが発生した PHP スクリプトの行を調べても解決が難しい種類のメッセージです。
2012年10月末時点で考えられる対応を列挙します

  1. i5_connect 関数の代わりに i5_pconnect 関数を利用
    • i5_connect または i5_pconnect 関数で I5_OPTIONS_CODEPAGEFILE を指定すると、関数が呼ばれると、関数内部ではコードページファイルを開く処理が行われていると推測されます。
      i5_connect 関数では、呼ばれるたびに毎回開かれていると推測されますが、 i5_pconnect 関数では、既存の接続を再利用できない場合にのみ、コードページファイルを開く処理が行われていると推測されます。
      過去の事例では、約 2000 回実行後に異常が発生するロジックで i5_connect 使用箇所を i5_pconnect に置き換えたところ、60000回の実行にも耐えられた例がございます。
      なお、試験時間の都合で60000回を上限に設定したため、最大値は未確認です。
      1秒に1回実行される処理の場合、これは 16時間分になります。
  2. i5_connect の回数を減らす
    • 1番目と似ていますが、同じプログラム内で i5_connect と i5_close を繰返すプログラムの場合、
      最初に1回のみ接続し、プログラムを抜ける(例えば exit )直前のみ i5_close を使うようにします
    • データベース関係の処理で i5 関数を使用している場合、db2 関数に置き換えます
  3. コードページファイルを使わない
    • 日本語の引数を渡したり、受け取る必要がないプログラムの場合には、i5_connect 関数にコードページファイルを指定しないようにします。
  4. PASE Loader 関係の PTF
    • PASE 環境内でのファイルのオープン・クローズ処理の円滑さや処理速度に起因する場合、
      PASE Loader 関係の PTF にて改善する可能性があります。
      2012/12/12 時点では、下記の PTF が利用できます。
      • V5R4M0 : MF44865
      • V5R4M5 : MF44881
      • V6R1M0 : MF46839
  5. ファイルディスクリプタ数上限値を変更
    • 開かれたファイルを管理する OS 側の設定値の上限を増やすことができれば、問題がおきるまでの時間を延長できる可能性があります。
      • Linux の場合は ulimit -n コマンドに該当します。
  6. 待機状態の TCP/IP 接続を制限する
    • TCP/IP 接続などが待機状態のまま残り、ファイルが大量につかまれている可能性があります。
      なお、この現象が本当に発生しているかどうか確認するには、Linux の場合ですと lsof コマンドを実行します。
      2012年10月末時点で考えられる手段としてはhttp.conf の Timeout を小さくします。
      Ver 5.1.0 の場合で既定値は 30000 秒 (500 分)ですが、これを短縮して待機状態を早く終わらせます。

最終更新のRSS