[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 メーリングリストの案内