PHP 5.5 オペコード キャッシュを使用しているとします。
opcache.memory_consumption=128
php-fpm に 4 つのプールがある場合、4 つのプールはそれぞれ 128MB のキャッシュを共有しますか、それともプールごとに 128M の opcache を所有しますか?
プール間で使用されるキャッシュメモリがどのように簡単なテストになるかについて疑問がある場合。
テクニックは非常に簡単です。たとえば、8081 および 8082 ポートをリッスンする異なる www-dir に 2 つの fpm-pools を作成し、2 つのファイルindex.phpおよびcheck.phpを同じ内容で作成します。
<?php
echo "<pre>\n";
var_dump(opcache_get_status());
最初に php-fpm サービスを再起動してから、最初に pool を実行しlocalhost:8081/index.php
、次にlocalhost:8082/check.php
. 出力のこのチェック["scripts"]
セクションの後。次の結果が得られました。
ローカルホスト:8081/index.php
["scripts"]=>
array(1) {
["/usr/share/nginx/html/index.php"]=>
array(6) {
["full_path"]=>
string(31) "/usr/share/nginx/html/index.php"
["hits"]=>
int(0)
["memory_consumption"]=>
int(1032)
["last_used"]=>
string(24) "Mon Dec 23 23:38:35 2013"
["last_used_timestamp"]=>
int(1387827515)
["timestamp"]=>
int(1387825100)
}
}
ローカルホスト:8082/check.php
["scripts"]=>
array(2) {
["/usr/share/nginx/html1/check.php"]=>
array(6) {
["full_path"]=>
string(32) "/usr/share/nginx/html1/check.php"
["hits"]=>
int(0)
["memory_consumption"]=>
int(1056)
["last_used"]=>
string(24) "Mon Dec 23 23:38:47 2013"
["last_used_timestamp"]=>
int(1387827527)
["timestamp"]=>
int(1387825174)
}
["/usr/share/nginx/html/index.php"]=>
array(6) {
["full_path"]=>
string(31) "/usr/share/nginx/html/index.php"
["hits"]=>
int(0)
["memory_consumption"]=>
int(1032)
["last_used"]=>
string(24) "Mon Dec 23 23:38:35 2013"
["last_used_timestamp"]=>
int(1387827515)
["timestamp"]=>
int(1387825100)
}
}
ご覧のとおり、2 番目のプールには既にキャッシュにindex.phpがあるため、答えは4 つのプールすべてが 128 MB のキャッシュを共有するということです。
リンクを通じてraina77owが述べたように、128 MBが4つのプール間で共有されます
それに加えて、公式ドキュメントに記載されているように
; Sets how much memory to use
opcache.memory_consumption=128
opcache.memory_consumptionは、使用するプールの数に関係なく使用されるメモリ制限を設定し、それに応じて共有されます。
OpCache は基本的に APC と同じように機能し (プリコンパイル済みスクリプト バイトコードを共有メモリに格納することにより) 、同じマスター プロセスによって開始された場合、APC オペコード キャッシュは php-fpm プール間で共有されることが確認されています。 4つのプール間でも共有されます。