ただいまの質問       
108 
phpquery

関連する質問

おすすめの質問
スポンサー広告(質問)
open-omni.com
open-omni
少しでもコストを抑えて手軽にAS400のオープン化に取り組めるツールとして、PHPの活用をお勧めします!
www.ibiweb.gr.jp
iBI
会員各社のソリューション連携により、AS400におけるアプリケーション環境をトータルでご提供します。
i5php.jp
opensource IBM i
IBM i(AS400)のオープン化を中心として、オープンソースソフトの啓蒙と普及に努めています。
phpquery.jp
opensource IBM i
PHP QUERYは、IBM i(AS400)上のクエリー定義をWeb画面から参照するデータ抽出ツールです。

phpの実行で、一定の負荷が溜まると「文字化け」「ファイルオープン数の限界」等の問題が発生する

12 年前に 質問(as/400) y-matsushima 300 pt

10 年前に編集 wakarana-i
>>2011.06.23

phpにて、EASYCOMが提供している、ライブラリを利用して i5のプログラムを実行しています。

■発生条件
大体ですが、2~3千回(約10時間稼動)ほど実行されると以下の問題が発生します。

■問題
  1.EASYCOMライブラリのi5関数から取得するマルチバイト文字が文字化けする
    i5_prepare_program_call、i5_queryから全角文字を取得
WEBEDI
  ↓に文字化け
WEBEDI

  2.fopen関数が失敗する
    php.log
     エラー出力なし
        apache.log
[Wed Jun 22 21:12:33 2011] [notice] Using [Zend Enabler module, Version 1.3.1] from [Zend Technologies Ltd.]
PHP Warning:  error_log(./log/i5ctrlClass_20110622.log) [<a href='function.error-log'>function.error-log</a>]: failed to open stream: Too many open files in /www/xxx/xxx/i5ctrlClass.php on line 850

  3.ZendServerのログイン後の画面でエラーメッセージが出力されて表示できない
http://xxx.xxx.xxx.xxx/ZendServer/Index/Index#99999...
An unexpected error has occurred

■復旧方法
  apacheのサービスを再起動することで、しばらく安定します。
  i5のコマンドラインから実行
STRTCPSVR SERVER(*HTTP) RESTART(*HTTP) HTTPSVR(ZENDSVR)

■問題の再現サンプル
  1.html
    ・ajaxで、phpを呼び出し
    ・ajaxのcompleteイベントが発生したら、再度phpを呼び出し
  2.php
session_start();
$i5_opt = array(I5_OPTIONS_CODEPAGEFILE => '/usr/local/zendsvr/etc/jp_5026.cpg');
$LINK = i5_connect('localhost', '', '', $i5_opt);
if(is_resource($LINK)){
  i5_close($LINK);
}
 3.firebugにて実行回数を確認、2500~4000回ループする間に問題が発生する。
   しばらくは、異常状態と正常が繰り返されるが、さらにループを回すと問題が発生し戻らなくなる。
   さらにループすると、i5_connectの接続が失敗するようになる。



内容は以上となります。色々試し、調べましたが原因が分からないのでアドバイスを頂きたいと思います。どうかよろしくお願い致します。

>>2011.06.24
追加情報
  解答ありがとうございます。
  ulimitの結果はデフォルト値の2000となっております。
  こちらの数値は、IBM様とのやり取りで調べました。
  オープン数の限界値を引き上げる方法は、原因が
  分からなくなってしまうので、最後の手段だと考えています。
  
  昨日の調査で、問題が発生する原因のコードが判明しました。
  i5_connectのオプションのI5_OPTIONS_CODEPAGEFILEを
  指定すると処理が終了しても、何かが解放されないようです。
  i5_pconnectを利用しても、結果は同じでした。

$i5_opt = array(<font ='red'>I5_OPTIONS_CODEPAGEFILE => '/usr/local/zendsvr/etc/jp_5026.cpg'</font>);
$LINK = i5_connect('localhost', '', '', $i5_opt);
  
  時間がなく、調べられなかったのですが、次は
  I5_OPTIONS_CODEPAGEFILEを5035に変えた場合どうなるかを
  調べようと思っています。

  日本語を利用する為の、I5_OPTIONS_CODEPAGEFILEを利用するに当たり
  必要な環境設定(apache,php,i5)を探してみる事にします。

>>2011.07.08
サポート提供企業様にて、同じ現象を確認していただきました。
strysd様の仰るように、内部の調査が必要だと思われますが、
プログラムの組み方で回避できる余地があるのか、根本的に問題があるのかが判断できておりません。

現状、まったくシステムが利用されない時間帯(夜)があるにもかかわらず、なんらかのハンドルがapacheサービスを再起動するまで、まったく開放されずに残ってしまいます。
今後、協力して原因をはっきりさせてから、ここに残しておきたいと思います。

現在、気になっているのが日本語のコードページファイルは、普通にみんなが使用されている機能だと言うことです。
サポート様も過去にこういった例がない、トラブルとして報告されていないという事でした。
apacheなど、毎日再起動するものでもないですし2000回実行されたら問題が発生します。
この事から、弊社のプログラムの組み方に問題があり、発生しているのではないかとも考えております。

引き続き、調査をします。

>>2011.07.12
追加情報
  i5_pconnectでコネクションを使いまわす方法で、回避できるようです。
  細かい情報ですが、どこまで公開してよいのか分かりません。
  正式に発表できる状態で、改めて詳細をまとめたいと思います。

  一番簡単で、延命ですが効果のあるma-tacさんのulimitの値を増やす、
  という方法をベストアンサーにしたいと思います。

  ご協力ありがとうございました。
12 年前に 質問(as/400) y-matsushima 300 pt

10 年前に編集 wakarana-i
1 vote

4

answers

回答数

ログインまたはユーザー登録してからでないと
回答はご覧頂けません。