d3diaryの新着日記ブロックが原因?でOut of memoryになる件


投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 | 投稿日時 2009/11/12 18:57
Katsumi Hioki  サイトURL

はじめまして。日置と申します。d3diaryでお世話になっています。
申し訳ありませんがPHPやプログラミングに関して全くの素人なので助けてくださいませんか?
当方トップページに「新着日記ブロック」を表示させているのですが、このブロックが原因で
Out of memoryが多発するようです。メモリ不足を疑いサーバー会社にも問い合わせましたが
原因ではないようです。
環境としましてはmysql5.1でお名前.comの共有サーバーGSを使っています。
xoopsは2.1.7です。
http://www.e-kaiwa.net/

minidiaryからの移行でd3diaryを使用しています。
今のところブロックをはずすと正常に動きます。
現在、b_diarylist.phpの

	$openarea =array_fill(1,10000,0);		
	$is_friend =array_fill(1,10000,0);		
	$is_friend2 =array_fill(1,10000,0);

    $usrcnt =array_fill(1,10000,0);

を理由はわからず削除しています。(エラーぽいので)
ネットでいろいろ調べましたがわからないので開発者さまの助けを仰ぎました。
よろしくお願いします。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/11/12 21:19 | 最終変更
なーお  長老   投稿数: 1784

日置さん、こんにちは。

d3diaryのご使用ありがとうございます。 :-)

引用:

当方トップページに「新着日記ブロック」を表示させているのですが、このブロックが原因で

Out of memoryが多発するようです。メモリ不足を疑いサーバー会社にも問い合わせましたが

原因ではないようです。

実際にそのサーバーに設定されているメモリリミットは、何MBなのでしょうか?
XCLは元々メモリの大食らいです。 サーバー会社からは、「通常では問題ない」という答えが返ってきても、64Mbか128Mb以上ないと実用にならない場合もあります。

また、ご存知のようにTOPページは最もメモリを消費しますし、 速度の問題もあります。 ここでd3diaryに関して言えば、minidiary時代からの友人権限チェックに加えて、カテゴリ毎の設定など多くの機能追加を行っているため、どちらかというと速度のほうを重視したコーディングになっているのも事実です。

また、ご指摘のarray_fill関数の部分は、noticeエラー回避のために仕方なく入れていますが、ベストな方法ではないのも承知しており、今後の改善ネタとさせていただきます。 (ただ、この部分の消費メモリは100Kb程度です。)

また、サイト内をアクセスさせていただきましたところ、TOPページ以外でも、XSNSモジュールにおいて同様に真っ白になるページが存在していますので、 やはりメモリ不足ではないかと推測されます。まずは確保メモリを増やすことをお考えください。 mainfile.php での設定や、.htaccessやphp.iniが使えるのであれば可能かと思います。

別の原因として、protectorモジュールの「DoS監視」に引っかかっている場合があります。 画像1枚を1アクセスと判定されるためです。 この場合は、protectorの「DoS監視の対象から外すモジュール」にd3diaryのディレクトリを指定することで回避できる場合があります。

以上、よろしくお願いします。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/11/13 0:41
Katsumi Hioki  サイトURL

お返事ありがとうございます。
ご指摘のメモリですがphpinfo機能にて調べたら
128MB確保されていました。
あと、protectorは未導入です。
他に何か原因は考えられますでしょうか?

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/11/13 5:29 | 最終変更
なーお  長老   投稿数: 1784

日置さん、こんにちは。

128MBあるんですか。 それでもだめなら
もっと大きくしてみるしか無いのでは?

あとは、TOPページで重い処理をしている他の処理(メインメニューなど)を見直してみるとか、、

いずれにしても、それだけのメモリがあるのでしたら、d3diaryのブロックだけの原因ではないと思いますよ。

あと、protectorは未導入とのこと。 導入をお勧めします。 :-?

追記
メンバー数が多いようですね、何名くらいでしょう? もしかすると、権限チェックのところでメモリを消費している可能性もありそうです。友人機能は使ってますか?

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/11/13 10:46
katsumi Hioki  サイトURL

現在、サーバー会社にも原因を調べてもらっています。
あと、アドバイスいただいたprotectorさっそく導入しました。(DoS監視からd3diaryははずしました)
メンバー数は登録完了メンバーが2,800名になります。
友人機能はxsns、d3diary共に使用状態です。
原因はここでしょうか?

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/11/13 10:54
katsumi Hioki  サイトURL

なーおさん、
トップページのエラー内容です。

Fatal error: Out of memory (allocated 9699328) (tried to allocate 35 bytes) in /---/xoops_trust_path/modules/d3diary/blocks/b_diarylist.php on line 57

XSNSのマイページでは

Fatal error: Out of memory (allocated 9699328) (tried to allocate 77824 bytes) in /---/xoops_trust_path/modules/xsns/language/japanese/modinfo.php on line 92

参考になりますでしょうか。

投票数:1 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/11/13 22:02 | 最終変更
なーお  長老   投稿数: 1784

日置さん

XSNSの友人機能、ユーザー数2800名なのですね。 なるほど、それは匂いますな。 :roll:

エラーの内容も確認しました。

b_diarylist.phpの57行目は、例のarray_fillの部分ですね。 ただ、このあたりはまだ何のループ処理もされておらず、友人判定処理すら行っていません。

ブロックがブロック番号の順で読まれるのか、モジュール番号の順で読まれるのかは存じないのですが、 いずれにしてもおそらく、このブロックが呼び出される時点で既にメモリリミット一杯に近い状態で、呼ばれたところで自分の処理さえあまりできていない時点でオーバーしたと考えられます。

XSNSの友人機能がどのような形で実装されているのかは存じませんが、試しにXSNSの New topic ブロックを非表示とし、d3diaryの Diary List ブロックを表示してみてください。 それでも引っかかりますか?

また、mainfile.phpで

define("XCL_MEMORY_LIMIT", "256M"); // extra param

は試してみましたか? ホダ塾ディストリでないと効かないかも。。

追記:
prtectorのDoS攻撃判定の閾値が低すぎるように思います。 あちこちで真っ白に。。

投票数:1 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/11/16 17:35
katsumi Hioki  サイトURL

お返事遅くなりました。
mainfile.phpは試してみましたが、その前にレンタルサーバーからこのような回答がありました。

「該当のエラーに関しましてはPHPを動作させた際に、サーバーのメモリー使用上限に
達してしまったため、発生しているエラーでございます。
また、メモリにつきましては1プロセスあたりご利用可能な容量に上限がございます
。PHP自体の動作にもメモリーを消費するため、ご利用ユーザー様にて
上限まで全てご利用いただくことは出来ません。」

ということなのでメモリを上げることはできないようです。
xoopsは前から使っているのですが、今の症状が出だしたのはモジュールがD3化しだしてからの
気がします。今、とりあえず応急処置としてd3diary→minidiaryに戻しています。
ただ、それでもout of memoryは解消されていないので原因はxoops2.1にあるんでしょうね。

なーおさんにはお手数おかけして申し訳ありませんでした。
d3diaryは必須モジュールですので復帰できるようにいろいろ試してみます。

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/11/16 23:23 | 最終変更
なーお  長老   投稿数: 1784

Hiokiさん、こんにちは。

引用:

ただ、それでもout of memoryは解消されていないので原因はxoops2.1にあるんでしょうね。

そればかりでは無いと思いますよ。
他のモジュールの処理も十分に原因として考えられます。
重そうな処理を行っているモジュール、言語切換え、などはどうでしょうか。

一方で、私の管理サイトの中にも、かなり重いサイトがありますが、128Mbで問題なく動いています。 (d3diaryも含まれます)

投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/11/17 21:59
Katsumi Hioki  サイトURL

なーおさん、こんばんは。
あれからいろいろ試していますが、不安定さは変わりません。
今度、時間のあるときに全部入れ直そうかと思っています。
ところで、話は変わりますが豊田スタジアムの屋根の制御をされたんですね。
すごいことです。
私は毎日スタジアムの横を通って出勤しています。

投票数:0 平均点:0.00
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文
  条件検索へ