![如果使用 prefork 作为 apache 模块运行,PHP 是否会利用 APC?](https://linux22.com/image/800955/%E5%A6%82%E6%9E%9C%E4%BD%BF%E7%94%A8%20prefork%20%E4%BD%9C%E4%B8%BA%20apache%20%E6%A8%A1%E5%9D%97%E8%BF%90%E8%A1%8C%EF%BC%8CPHP%20%E6%98%AF%E5%90%A6%E4%BC%9A%E5%88%A9%E7%94%A8%20APC%EF%BC%9F.png)
我已经安装了 APC,但我没有观察到对性能的影响像我预期的那样大。实际上,我不确定我是否观察到了任何好处,尽管这可能只是因为与执行我自己的代码相比,解释 php 代码所花费的 CPU 时间可以忽略不计。
所以我想知道:是不是因为我将 PHP 作为 apache 模块运行(而不是 fastcgi)和/或因为 php 使用的是 prefork(而不是 worker)?这些因素是否会以某种方式破坏通过 APC 可以实现的性能改进?
答案1
APC 在所有 Apache 进程共享同一个 APC 缓存的意义上正常工作mod_php
。事实上,FastCGI 配置在这方面可能更成问题(例如,如果使用mod_fcgid
,APC 共享缓存将无法正常工作;但是,php-fpm 不应该有这样的问题)。
APC 可能需要进行一些调整才能正常工作;例如,默认共享内存大小 ( apc.shm_size=32M
) 可能太小。您可以使用apc.php
随 APC 分发的脚本来获取缓存的一些性能指标 — 将脚本放入由同一缓存实例提供服务的 Web 可访问目录中(mod_php
这意味着“同一 Apache 实例上的任何虚拟主机”),并在实际站点上存在一些负载时从 Web 浏览器访问它。您的缓存不应该在正常的站点负载下变满(如果缓存在某些罕见的管理请求下变满是正常的,但用于回复普通站点用户请求的 PHP 代码应该始终适合缓存以获得最佳性能)。