バージョン選択

フォーラム

メニュー

オンライン状況

48 人のユーザが現在オンラインです。 (38 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 48
もっと...

サイト内検索

質問 > 管理機能 > ログローテーション処理について

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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 にも記載しましたが非マルチスレッドでも現実装では、何らかの不具合は発生しうるとは思っています。それが、アーカイブの中間が消失するようなものが頻発するであれば早急に対処が必要だと思います。しかし、欠番が発生して、実質的には一番古いログが早い時期に紛失する程度の不具合ならば、対処は少し後でも良いのかなとも思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

AMUAMU
投稿日時: 2010/9/17 19:37
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
私も、頻度が低かったりや欠番発生程度であれば対処は後でも良いかなとは思います。

そういえばlog4phpにするなんて話ありませんでしたっけ・・・?
任せちゃえばローテートも楽そうなんですが


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

nanasess
投稿日時: 2010/9/17 20:20
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2311
Re: ログローテーション処理について
引用:

AMUAMUさんは書きました:

そういえばlog4phpにするなんて話ありませんでしたっけ・・・?
任せちゃえばローテートも楽そうなんですが


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
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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;


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

AMUAMU
投稿日時: 2010/9/18 0:23
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
renameはキャッシュ使用対象と5.1台では一時期書いてあったようです。問題が多かったのか5.3系では対象外の模様(マニュアルを信じるならば)。

clearstatcache も仕様がブレブレで5.3では結局、明示的にしないとrealpathキャッシュをクリアしない&ファイル名を指定してキャッシュクリアするという仕様に変わりましたしね・・・

唯一ぶれていないのはunlinkは必ずキャッシュをクリアするという仕様でしょうか
信じられるのはunlinkだけと思ってます・・・(苦笑


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

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 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,682名です
総投稿数は109,930件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1279
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.