PHPでローカルのメモリに10BMのデータをキャッシュして100個のPHPプロセスからキャッシュデータを参照した場合、参照先でデータを変更しなくても1,000MBのメモリを消費するのでしょうか?

(eAcceleratorやAPC等を利用した場合を想定)

もし1,000MB消費する場合、それを回避する方法があれば教えて下さい。

回答の条件
  • 1人2回まで
  • 登録:2008/01/23 04:53:18
  • 終了:2008/01/30 04:55:02

回答(1件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402008/01/23 19:59:19

ポイント60pt

回答ははずしてるかもしれませんが・・。

■eAcceleratorの場合

http://ml.php.gr.jp/pipermail/php-users/2005-February/025139.htm...

eaccelerator_putでアプリケーション変数?に登録する

eaccelerator_getでアプリケーション変数から取り出す

---------

$val = eaccelerator_get($key)

>100個のPHPプロセスからキャッシュデータを参照した場合

おそらく、こういうコードを書いた時点で、$valという変数の領域が別個に確保されて

データがコピーされると思います。

変数を変更するには明示的にeaccelerator_putを実行しないと駄目だと思われるので

やっぱり、メモリーはプロセス分確保されるのではと思います。

---------

10MBを1つのキーで登録しないで、何分割にもして、うまくガーベージコレクションが

働くようにすれば、10MB×1000個にはならないのではないかと思います。

---------

参照渡し(アドレス渡し)になってるのなら、別途メモリーは確保しないと思いますが

そういう風にも見えないので、「参照先でデータを変更しなくても」しても関係ないと

思います。

---------

id:tomoyuki28jp

> おそらく、こういうコードを書いた時点で、$valという変数の領域が別個に確保されてデータがコピーされると思います。

やはりそうですよね。

参照渡しとGCの件、納得です。

参考になりました。

どうもありがとうございました。

2008/01/24 12:53:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません