我已经在我的服务器上启用了 OPcache。它是一个共享托管服务器,服务于 ±30 个网站。有 2 个使用 Symfony2 的高流量网站。
OPcache 是否足够智能,可以缓存到大多数高流量网站,而不用其他不那么重要的网站填充其缓存?
还是先到先得?
不幸的是,几乎没有关于操作码缓存如何工作的像样的文档,但希望这将很快进入 PHP 主流。与此同时,我已经完成了这篇文章,它应该会有所帮助:Zend 引擎和操作码缓存。请注意,这是在我自己的实验分支的 wiki 中,但此页面是纯 OPcache。
就共享托管基础设施模板而言,操作码缓存通常无法很好地提供这些服务,这有多种原因:
大多数缓存(OPcache、APC、Xcache 等)都使用共享内存缓存,当您将 R/W SMA 映射到进程空间时,实际上您将授予对任何可以映射到的进程的完全 R/W 访问权限它。这意味着它们必须共享相同的安全域。这对于主机提供商通常希望在单独的虚拟主机之间强制执行基于 UID 的分离的共享主机来说是非常有问题的。
主流缓存都没有提供替代(即非 SMA)技术。我的 MLC OPcache 演示器在 OPcache 上使用了基于文件的层,这为共享主机提供了本地 OPcache 的大约 80% 的性能改进,但我这个分支的目的不是为了与核心扩展相反,而是为了降低这些技术的风险,以至于 PHP 在某些时候会将它们作为标准提供。
我发现 PHP 开发人员几乎没有兴趣改进共享托管 SAPI。这种观点似乎被这样一种观点所主导,即如果应用程序托管商对性能感兴趣,那么他们应该简单地为自己获取一个 VM 并在其中运行一个专用的 LAMP 堆栈。
但是,如果您在 Apache 下运行mod_php5,那么启用 OPcache 很简单,并且对于大多数复杂的应用程序,例如 MediaWiki、Drupal 和基于框架的应用程序(Symphony2、Cake 等),通常可以将吞吐量提高约 2 倍。
对于 ~10+ vhost 最佳点,可以设置持久 GCI / FastGCI 模板(fpm等)以使用具有每个 UID SMA 的 OPcache。虽然配置可能很困难。
对不起,一般的答案,但你问了一个一般的问题,没有更具体的细节,我不能给出更具体的答案。