質問 > 管理機能 > ログローテーション処理について |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nanasess |
投稿日時: 2010/9/16 9:35
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2311 |
Re: ログローテーション処理について >マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。
EC-CUBE に限らず, 同梱している PEAR パッケージもマルチスレッドは意識してない可能性があります. PHP の Windows用バイナリはスレッドサポート付きのものが配布されていますし, 顕著化するようでしたら, EC-CUBE のみの問題では収まらないかもしれません. |
seasoft |
投稿日時: 2010/9/17 18:16
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: ログローテーション処理について > >しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・
> > いくつかありそうですが使用頻度との兼ね合いでしょうかね? > なかなか難しい所です。 patapata 様の環境でエラーが発現するという事実があるので、その原因がマルチスレッドに依存するものなのか、非マルチスレッドでも発現する性質のものなのかなどを切り分けていきたいですね。 今のところ、個人的には PHP をマルチスレッドで実運用に回した事が無いのですが、EC-CUBE がマルチスレッドである程度使いものになるならば、それはそれで興味深いですし、今後の実装にあたってマルチスレッドを意識する事も必要かなと思います。 そういった意味では、patapata 様以外でも、マルチスレッド環境での動作状況を把握されている方がいらっしゃいましたら、情報をいただきたいですね。 なお、http://svn.ec-cube.net/open_trac/ticket/746 につきましては、2.4 系のチケットであり、このチケット内でマルチスレッド対応を行なうのは困難だと考えまして、クローズさせていただきました。このスレッドでの状況進行に応じて、2.5系として、新チケットで対応するのが良いのではないかと考えています。 Windows の rename 関数の問題は、2.4系で現存する不具合ではありますが、2.4.5 がリリースされるかも分からないので、2.5系のチケットとして、別途チケットを発行し、改修してみました。 http://svn.ec-cube.net/open_trac/ticket/809 http://svn.ec-cube.net/open_trac/changeset/18805 また、http://svn.ec-cube.net/open_trac/ticket/746#comment:6 にも記載しましたが非マルチスレッドでも現実装では、何らかの不具合は発生しうるとは思っています。それが、アーカイブの中間が消失するようなものが頻発するであれば早急に対処が必要だと思います。しかし、欠番が発生して、実質的には一番古いログが早い時期に紛失する程度の不具合ならば、対処は少し後でも良いのかなとも思います。
|
AMUAMU |
投稿日時: 2010/9/17 19:37
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: ログローテーション処理について 私も、頻度が低かったりや欠番発生程度であれば対処は後でも良いかなとは思います。
そういえばlog4phpにするなんて話ありませんでしたっけ・・・? 任せちゃえばローテートも楽そうなんですが
|
nanasess |
投稿日時: 2010/9/17 20:20
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2311 |
Re: ログローテーション処理について 引用:
yokkuns 様からのご提供で, コードはコミットされています http://svn.ec-cube.net/open_trac/ticket/149 現状では, ログを吐く場所を log4php.properties で設定しなければならないので, これを data/logs 以下に自動設定するには, どうしたら良いかなぁ... というところで止まってます(汗) あと, 関数名も gfXXX とかではなくて, $logger->info() とかでアクセスできるようにしたいです. |
patapata |
投稿日時: 2010/9/17 20:49
対応状況: −−−
|
仙人 登録日: 2010/7/7 居住地: 神奈川県 投稿: 502 |
Re: ログローテーション処理について すみません。調査難航していまして・・・
とりあえずご報告だけ。 未カスタマイズ状態のeccube2.4.4で、現象を確認いたしました。 また頻度といたしましては、ログローテーション時必ずおきますね。 最悪site.log自体がなくなってしまい、その後のログが一切収集されなくなってしまいます。 なにか心当たりがある方おりましたら、お助けくださいませ。 また私も〜とかいう方がおりましたら、いっしょに考えましょ。 正直時間が迫られておりまして、きっつきつです。 ---環境---- EC-CUBE 2.4.4 OS Linux DBサーバ MySQL 5.0.77 WEBサーバ Apache PHP 5.1.6 |
patapata |
投稿日時: 2010/9/17 22:14
対応状況: −−−
|
仙人 登録日: 2010/7/7 居住地: 神奈川県 投稿: 502 |
Re: ログローテーション処理について 追加情報:
原因がなんとなくわかりました。 file_exists や filesize はどうやらキャッシュが残るらしく clearstatcache(); で消さないと駄目なようです。 現象が発生しない方は、おそらくPHPのバージョンの違いかと思われます。 PHP Ver5.1.6をご使用の方がおりましたら、logファイルの状態をご報告してくれると助かります。 また以下のように入れてみたところ、ファイルが消えることはなくなりましたが・・・filesizeでワーニングを吐くようになりました。 あとちょっとっぽい。 ---現状コード------------- function gfLogRotation($max_log, $max_size, $path) { // ファイルが最大サイズを超えていない場合、終了 clearstatcache(); if (filesize($path) <= $max_size) return; // アーカイブのインクリメント(削除を兼ねる) for ($i = $max_log; $i >= 2; $i--) { $path_old = "$path." . ($i - 1); $path_new = "$path.$i"; if (file_exists($path_old)) { clearstatcache(); rename($path_old, $path_new); } } // 現在ファイルのアーカイブ rename($path, "$path.1"); } |
seasoft |
投稿日時: 2010/9/17 23:15
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: ログローテーション処理について > そういえばlog4phpにするなんて話ありませんでしたっけ・・・?
> 任せちゃえばローテートも楽そうなんですが 私も今回の件で log4php は考えました。 しかし、ちょっとやりたいことに対して規模が大きいかなぁと思ったりも。 まぁ、EC-CUBE 全体の処理からしたら、些細な負荷のような気もするので、色々と独自で考えるよりもサクッと切り替えてしまうのもアリかもしれませんね。 nanasess 様のご指摘のように、課題はあるようですが・・・
|
seasoft |
投稿日時: 2010/9/17 23:20
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: ログローテーション処理について 私も clearstatcache で以前にハマったことがあり、今回も気になっていたのですが、うちの環境だと問題が発現しないんですよね・・・ たしかに、バージョン依存はありそうですね。
しかし、rename はキャッシュを使用していないと思っていましたが、使っているんですかね。 > また以下のように入れてみたところ、ファイルが消えることはなくなりましたが・・・filesizeでワーニングを吐くようになりました。 既にお試しかもしれませんが、下記などは? if (filesize($path) <= $max_size) return; ↓ if (!file_exists($path) || filesize($path) <= $max_size) return;
|
AMUAMU |
投稿日時: 2010/9/18 0:23
対応状況: −−−
|
神 登録日: 2009/5/2 居住地: 東京都 投稿: 2712 |
Re: ログローテーション処理について renameはキャッシュ使用対象と5.1台では一時期書いてあったようです。問題が多かったのか5.3系では対象外の模様(マニュアルを信じるならば)。
clearstatcache も仕様がブレブレで5.3では結局、明示的にしないとrealpathキャッシュをクリアしない&ファイル名を指定してキャッシュクリアするという仕様に変わりましたしね・・・ 唯一ぶれていないのはunlinkは必ずキャッシュをクリアするという仕様でしょうか 信じられるのはunlinkだけと思ってます・・・(苦笑
|
patapata |
投稿日時: 2010/9/18 0:33
対応状況: −−−
|
仙人 登録日: 2010/7/7 居住地: 神奈川県 投稿: 502 |
Re: ログローテーション処理について また明日調べてみますが・・・
そろそろ私のようなPHP初心者には限界のレベルです。 有識者の今後の改収を期待して、キャッシュが残る可能性のある関数を展開しておきます。 PHP4,PHP5系 stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), および fileperms(). 参考ソース元: http://php.net/manual/ja/function.clearstatcache.php ECキューブでどれを使っているかまでは、調べておりませんがログ処理など頻繁に行われる箇所で使われている場合は注意する必要がありそうです。 |
« 1 (2) 3 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |