[PHP-users 32372] Re: memory_limitについて
Yasuo Ohgaki
yohgaki @ ohgaki.net
2007年 7月 4日 (水) 02:06:53 JST
荒川 弘徳 さんは書きました:
> お世話になります。
>
> memory_limitがコンパイルしていない環境について、ご経験がある方が
> いらっしゃいましたら、教えていただけないでしょうか。
>
> -------------------------------------
> Linux
> PHP 4.4.4
> ※レンタルサーバ(ROOT権限なし)
> --------------------------------------
>
> 1.メモリの制限について
> memory_limitがコンパイルされていれば、デフォルト8Mですが、
> コンパイルしていない場合、どのような制限があるのでしょうか。
メモリをいくら使ってもエラーになりません。
実際に利用可能なメモリまで使えるようになります。
# Cのmalloc()でエラーになるまで使える
>
> 2.メモリ使用
> PHP に割り当てられたメモリの量を知りたいのですが、
> memory_get_usageコマンドがmemory_limitをコンパイル
> していないため、使えません。
>
> memory_get_usage以外で他に、PHPのメモリの量を
> 知る方法はないのでしょうか。
PHPが使用しているメモリを知るのはあまり簡単ではありません。
memory_limitが有効な場合でもZendメモリマネージャを使わない場合、
使用しているメモリとしてカウントされません。
解りやすい例は、DBのクエリだと思います。
100万件のレコードを抽出クエリを実行するとDBのライブラリが100万件
分のレコードを保持する為のメモリ領域を確保しますが、このメモリ確
保にはZendメモリマネージャは利用されないので10GBでも確保できれば
確保してしまいます。
PHPが利用しているメモリだけではなくなりますが、PHPを実行している
ApacheのプロセスやCGIのメモリ使用量を知るならgetrusageが使えます。
http://jp.php.net/manual/en/function.getrusage.php
メールの内容からすると必要な情報はrusageの方だと思うのでこちらが
適切かと思います。
>
>
> 現在、運用しているシステムがいつAllowed memory size エラーが
> 発生するかひやひやしております。
>
> メモリの量が制御できなければ、ソースを変更する手段を最終手段と
> 考えておりますが、あまりしたくないのです。。。
多分利用されているシステムにはlimitが設定されているのだと思います。
system('ulimit')などを実行すると利用できるメモリ量が分かるかも知れ
ません。
--
Yasuo Ohgaki : yohgaki @ ohgaki.net : http://www.ohgaki.net/
PHP-users メーリングリストの案内