我在我的服务器上启用了OPcache.它是一个共享托管服务器,为±30个网站提供服务.有2个高流量网站使用Symfony2.
OPcache是否足够聪明,可以缓存到大多数高流量网站,而不是将其缓存填充到其他不那么重要的网站上?
或者它是先到先得?
不幸的是,关于操作码缓存如何工作的缺乏相当不错的文档,但希望这很快就会进入PHP主流.与此同时,我已经完成了这个应该有用的文章:Zend Engine和操作码缓存.请注意,这是我自己的实验分叉的wiki,但这个页面是纯OPcache.
就共享托管基础架构模板而言,操作码缓存通常很难提供这些模板,这有以下几个原因:
大多数缓存(OPcache,APC,Xcache,...)使用共享内存缓存,当您将R/W SMA映射到进程空间时,实际上您可以对任何可映射到的进程提供完整的R/W访问权限它.这意味着他们必须共享相同的安全域.对于共享主机而言,这是非常有问题的,其中主机提供商通常希望在单独的vhost之间实施基于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.虽然配置可能很困难.
对于一般答案很抱歉,但您已经问了一般问题,没有更具体的细节,我无法给出更具体的答案.