SymLinks と PHP のインクルード (パフォーマンス)

SymLinks と PHP のインクルード (パフォーマンス)

Apache を実行している Linux サーバーにとって、これら 2 つのうちどちらが処理が簡単/高速でしょうか?

A) PHP ファイルを指すシンボリックリンク:

file-sym.php ---> file-orig.php

B) 次のように、別の PHPファイル ( file-inc.php) を含む PHP ファイル ( file-orig.php) があります。

ファイル-inc.phpの内容

<?php 
    include('file-orig.php'); 
?>

誰かがベンチマークを行ったことがあるかどうか興味があります。

答え1

私の直感では、シンボリックリンクの方が高速になると思います。なぜなら、そのチェーンの最初のリンクを処理するときに読み取るデータが少なくなるからです。ただし、大きな違いがあるかどうかはわかりません。違いを確認するには、2 つをベンチマークしてみてください。

A)

  1. ファイルの読み取り (ext2+ ではシンボリック リンクが inode に含まれるため、シークは 1 回のみ)
  2. 他のファイルを読む
  3. PHPを実行する

B)

  1. ファイルを読む
  2. PHPを実行する
  3. 他のファイルを読む
  4. PHPを実行する

include() バリアントは、システム上にシンボリックリンクを作成できない Windows ユーザーに適していると思います。

答え2

多くの管理者は、セキュリティとパフォーマンス上の理由から、Apache シンボリックリンクを無効にしています。

パフォーマンス上の理由から、Apache チューニングに関する次のページを参照してください。http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

URL 空間のどこにでも Options FollowSymLinks がない場合、または Options SymLinksIfOwnerMatch がある場合、Apache はシンボリックリンクをチェックするために追加のシステム コールを発行する必要があります。ファイル名コンポーネントごとに 1 つの追加コールです。たとえば、次の場合:

 <Directory />
 DocumentRoot /www/htdocs 
 Options SymLinksIfOwnerMatch
 </Directory>

URI /index.html に対するリクエストが作成されます。次に、Apache は /www、/www/htdocs、および /www/htdocs/index.html に対して lstat(2) を実行します。これらの lstat の結果はキャッシュされないため、すべてのリクエストで発生します。

環境とコードによっては、シンボリック リンクが指数関数的なパフォーマンスの問題になる可能性があることがわかります。

関連情報