[PHP-users 17873]Re: 多重include(once)について

Yasuo Ohgaki yohgaki @ ohgaki.net
2003年 9月 15日 (月) 08:23:36 JST


大垣です。

yoshiaki yazawa wrote:
> include等の関数を利用した場合についてですが
> 
> どのタイミングでincludeされるのでしょうか?

include文が実行された時です。コンパイル時には読み込みません。
簡単なテストスクリプトを作成すると直ぐに確認できます。
# 文法エラーがあるスクリプトを条件付きでインクルードする、
# straceで見るなど。

> 条件分岐等で必要なファイルのみをincludeするようにした場合と
> とりあえず、必要になるかもしれないファイルを全て最初に
> includeした場合でメモリの使用量に変化が見られないです。
> (かつ、後者の方が処理が遅くなっている気がする)

不必要なスクリプトをロードした場合、必ず遅くなります。
# とは言ってもPHPのバグなどで特定の条件下では問題が
# 発生する場合もあります。
# スクリプト自体のバグで遅くなってしまう、と言う場合も
# も考えられます。

> つまり、1プロセスのメモリ使用量が相当大きな値になってしまいます。
> 必要な時にincludeするとう方法でメモリ使用量を抑えようと思っているのですが
> こういう事は不可能なのでしょうか?

スクリプトを読み込むだけでメモリの使用量が気になることは
普通はないはずです。
# 例外としては、かなり大きいデータ用の配列を定義したスク
# リプトを作っているなど

> PHPのソースの解釈が一連のincludeファイルを呼び出し時に一気に読み込んでる
> 気がするのですが・・・

そのような動作はしません。include_once/require/require_once
も同様です。

> 全部読み込むとapacheのメモリ使用量が1プロセスで15kを軽く超えてしまって
> プロセス数の限界がかなり早くなってしまいます。

15kと言うのは15MB?の間違いでしょうか?

ps uaxwww | egrep 'USER|httpd'

等の出力を張り付けた方がが良いと思います。

あまり参考になりませんが、一般的に利用できるApache
モジュールほとんどを読み込んでいるApache 2.xの場合
はこうなっています。

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root     20598  0.0  1.3 60300 7084 ?        S    Sep12   0:00 /usr/sbin/httpd
apache   21056  0.0  0.7 60512 3668 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21057  0.0  0.7 60512 3976 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21058  0.0  0.8 60512 4440 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21059  0.0  0.8 60512 4536 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21060  0.0  0.8 60512 4592 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21061  0.0  0.8 60512 4596 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21062  0.0  0.9 60512 4656 ?        S    04:02   0:00 /usr/sbin/httpd
apache   21063  0.0  0.9 60512 4796 ?        S    04:02   0:00 /usr/sbin/httpd

# RSSのサイズが実際に利用しているメモリ量に近いものになりますが、
# 共有メモリも含まれます。詳しくはOSのドキュメントを参照してください。

> それがネックでCGIやSSIとして動作しているときよりサーバ全体のパフォーマンスが
> 明らかに低下しているのですが私の気のせいでしょうか?

psの出力を見てみなと判りませんが、別の原因の可能性
の方が高いと思います。

--
Yasuo Ohgaki



PHP-users メーリングリストの案内