每个php-fpm池都有自己的内存池吗?

时间:2013-12-13 15:45:34

标签: php opcache

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

opcache.memory_consumption=128

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

3 个答案:

答案 0 :(得分:5)

如果您对池之间的缓存内存如何进行简单测试有任何疑问。

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

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

首先重启php-fpm服务,然后运行第一个池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缓存

答案 1 :(得分:1)

正如raina77ow通过 link 所提到的那样 128 MB将在4个池之间共享

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

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

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

答案 2 :(得分:0)

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