バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
patapata
投稿日時: 2010/9/15 17:27
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
ログローテーション処理について
環境:
EC-CUBE 2.4.4
OS Linux
DBサーバ MySQL 5.0.77
WEBサーバ Apache
PHP 5.1.6
Webブラウザ IE8

いつもお世話になっております。

現在ログローテーションが起きるタイミングにおいて、
Warningが発生しており原因を追いかけてみましたが、よくわからなかったので質問させて頂きました。

詳細:
関係ありそうな、設定は以下です。
MAX_LOG_QUANTITY = 5
MAX_LOG_SIZE = "1000000"
site.logのファイル権限は、全て"666"


Warning内容:
GC_Utils.phpのgfLogRotation関数にてrenameに失敗。
Warning: rename(・・・/site.log.1) [function.rename]: そのようなファイルやディレクトリはありません

またWarningだけなら特に気にしておりませんでしたが、上記Warningが発生した場合site.logファイルが消えてしまいます。
→例えば、site.log、site.log.1〜5までファイルが存在している状態でログローテーション処理が発生した場合、site.log.1やsite.log4のファイルがなくなってしまいます。

また、MAX_LOG_SIZE = "10000"に変えサイトトップで、何度かリロードを行い確認したところrename処理が何重にも走っているようです。これは想定された動作なのでしょうか?

-----------------参考-----------------------------------
function gfLogRotation($max_log, $max_size, $path) {
// ファイルが最大サイズを超えていない場合、終了
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)) {
rename($path_old, $path_new);
}
}

// 現在ファイルのアーカイブ
rename($path, "$path.1");
}

AMUAMU
投稿日時: 2010/9/15 18:14
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
下記の不具合チケットと、修正内容を確認されると良いと思います。

http://svn.ec-cube.net/open_trac/ticket/746


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

[url=h

patapata
投稿日時: 2010/9/15 18:59
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: ログローテーション処理について
回答ありがとございます。

チケットを確認いたしましたが、正式版Var2.4.4では既に対応されており、差分はないようです。
(背景:赤が削除 背景:緑が追加ですよね)
その上で、現象が発生しております。


gfLogRotation関数は、スレッドセーフにしなければならないような気がいたしますが・・・見当違いでしょうか?

追記:
現象確認方法と致しまして、
パラメータ設定で、MAX_LOG_SIZEを"1000"や"10000"等の小さい値に設定し、サイトのトップを何度かリロードする。
(パラメータ設定で、DEBUG_MODEをTrueに設定すれば画面にWarninngが出るのでわかりやすいかと・・・)
AMUAMU
投稿日時: 2010/9/15 21:10
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
あら、このチケットの修正内容と質問を私も勘違いしていました。申し訳ないです。

patapataさんの環境で、Warningが出る理由はいまいち分かりませんが、この修正内容は問題があると私も認識しました。

・ご指摘の通りスレッドセーフでない
・私が気付いたのは、renameでのファイル上書きは環境・設定依存する。

もしかしたらpatapataさんについてはrename関数の依存によるものかもしれません。

当該チケットをリオープンしておきます。


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

[url=h

seasoft
投稿日時: 2010/9/15 23:34
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: ログローテーション処理について
2.5 デベロッパー版ですが、11クライアント同時接続でテストしましたが再現しないですね・・・
環境依存が強そうです。

EC-CUBE 2.5.0-dev
OS Linux (Fedora)
DBサーバ PostgreSQL 8.3.7
WEBサーバ Apache/2.2.9
PHP 5.2.9
GD Loaded


AMUAMU 様

> ・私が気付いたのは、renameでのファイル上書きは環境・設定依存する。

「設定」というのは、上記環境でも関与ありそうな部分はありますか?


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

patapata
投稿日時: 2010/9/16 0:36
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: ログローテーション処理について
チケット内容を見る限り、以前の処理とは大分動作が異なっていますよね。

例えば、MAX_LOG_QUANTITYを10→5に変えたり場合、過去のコードでは、ファイル数が5になりますが・・・今のコードでは、site.log.6からは無視されファイル数は10のままです。

また過去のコードでは最後にsite.logを作成しておりますが、今のコードでは次回ログ書き込み時までsite.logファイルは存在しないかと・・・
どこで作成しているのかまで、まだおっかけてはいませんが、
呼び出し順序次第で、現在のコードではsite.logが存在しない場合、最後のrenameで必ずWarningがでてしまうかと思われるのですが。

他にディレクトリの存在チェックなんかもとっぱらわれていますし

う〜ん。チケットに記されている対応以外の処理も含まれてのことならわかりますが・・・
また明日時間をみて調べてみます。
seasoft
投稿日時: 2010/9/16 1:52
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: ログローテーション処理について
> また過去のコードでは最後にsite.logを作成しておりますが、今のコードでは次回ログ書き込み時までsite.logファイルは存在しないかと・・・
> どこで作成しているのかまで、まだおっかけてはいませんが、
呼び出し順序次第で、現在のコードではsite.logが存在しない場合、最後のrenameで必ずWarningがでてしまうかと思われるのですが。

ファイルの生成は GC_Utils の中で、"a+" で fopen している部分になると思います。
その後で、ログローテーションしているので、同時処理が1本では発現しないと推測しています。

そうなると、実際にマルチスレッドといった観点で発生している状況かもしれませんね。

また、fopen や fwrite ではエラーを検出していませんので、その辺りでコケることがあると、rename の段階で警告が発生という流れも考えられそうです。


ちなみに、patapata 様がお試しになっている環境では、実際に PHP はマルチスレッドで動作していますか?

前述の当方テスト環境は、非マルチスレッドとなっています。


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

AMUAMU
投稿日時: 2010/9/16 2:23
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
>> ・私が気付いたのは、renameでのファイル上書きは環境・設定依存する。

>「設定」というのは、上記環境でも関与ありそうな部分はありますか?

patapataさんの環境に関する情報だけでは不明ですが、私が知っているrename関数の環境依存、設定依存は

・Windows上のPHPではrenameで既にファイルが存在する場合は、ファイル上書きをしない挙動だったと記憶しています(以前はまったことが・・・)。環境依存、たぶん一番問題。
・suPHP下では、既にファイルが存在する場合rename関数での上書きをしなかった記憶があり、環境・設定依存の可能性あり。
・サポート外かと思いますがキャッシュ高速化系(eAccelarator等)では上書きの挙動が変わったような気がします。

また、スレッドセーフで無い問題はCGIモードでPHPが動いていると発生しやすいかと。


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

[url=h

seasoft
投稿日時: 2010/9/16 3:06
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: ログローテーション処理について
patapata 様の冒頭の環境情報からしますと、(今回は)1点目は排除できそうですので、「suPHP」と「高速化モジュール」と「CGI」といった辺りが気になるところですね。


> また、スレッドセーフで無い問題はCGIモードでPHPが動いていると発生しやすいかと。

スレッドセーフと聞いて MPM Worker での運用あたりを推測していましたが、なるほど、CGI ですか。CGI でマルチスレッドとは思いつきませんでした。

しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・
マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。


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

AMUAMU
投稿日時: 2010/9/16 3:18
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: ログローテーション処理について
>しかし、EC-CUBE でスレッドセーフで無い処理に心当たりがいくつか・・・

いくつかありそうですが使用頻度との兼ね合いでしょうかね?
なかなか難しい所です。

>マルチプロセスは意識があっても、スレッドまでは意識していないのが現状です。

DB周りのロック処理なども含めて、ここらへんを中心にスケーリングした利用方法に対応させるのは中々大変なので優先順位は正直低いかもしれませんね・・・
(環境依存させれば比較的楽で、よくカスタマイズしていますが、幅広く動かすとは正反対の使い方でフィードバックがなかなか難しい・・・


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

[url=h

(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は73,404名です
総投稿数は102,492件です

投稿数ランキング

1
seasoft
7333
2
468
3112
3
AMUAMU
2712
4
nanasess
2187
5
umebius
2036
6
yuh
1615
7
red
1454
8
h_tanaka
1140
9
tsuji
936
10
fukap
907
11
shutta
835
12
tao_s
793
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

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

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