8

假设我正在使用 PHP 5.5 操作码缓存,并设置

opcache.memory_consumption=128

,如果我在 php-fpm 中有 4 个池,这 4 个池中的每一个会共享 128MB 的缓存,还是每个池都拥有 128M 的 opcache?

4

3 回答 3

6

如果您对如何在池之间使用缓存内存有任何疑问,请进行简单测试。

技术很简单。在不同的 www-dir 上创建 2 个 fpm 池,例如 8081 和 8082 端口以及 2 个文件index.phpcheck.php具有相同的内容:

<?php
echo "<pre>\n";
var_dump(opcache_get_status());

首先重启你的 php-fpm 服务,然后运行 ​​first 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)
    }
  }

如您所见,第二个池已经有index.php在缓存中,所以答案是所有 4 个池将共享 128MB 的缓存

于 2013-12-23T19:24:46.680 回答
1

正如raina77ow 通过链接提到的,128 MB 将在 4 个池之间共享

除此之外,如官方文档中所述

; Sets how much memory to use
opcache.memory_consumption=128

opcache.memory_consumption设置将使用的内存限制,无论您使用多少个池,它都会相应地共享。

于 2013-12-23T18:31:44.833 回答
0

由于 OpCache 本质上与 APC 的工作方式相同(通过将预编译的脚本字节码存储在共享内存中),并且确认APC 操作码缓存在 php-fpm 池之间共享,如果它们由同一个主进程启动,则 128 MB 将是也在 4 个池之间共享。

于 2013-12-19T12:37:49.733 回答