我的网站运行在PHP 5.5与FastCGI (mod_fcgi
)。我知道其他opcache类型(如APC)不能很好地工作,因为php-cgi进程之间不能共享内存(这里)。
我使用PHP 5.5内置OPcache。内存是否在进程之间共享,或者这与APC/Xcache与mod_fcgi
的问题完全相同?
有什么方法可以测试吗?
我一直不明白为什么这甚至被认为是一种可能性,这是不现实的可能性:
APC和Opcache都有几种形式的共享内存,它们的默认值和最合适的类型是mmap内存,但是由于各种奇怪的原因,它们需要支持劣等类型,这些劣等类型都没有留下这种工作的可能性(甚至是不切实际的)。
当谈到mmap…
APC如果你不提供一个文件掩码,APC使用匿名共享映射,你不能跨不同的进程边界共享它,这是不可能的。
如果你提供了一个文件掩码,APC使用不同步的共享映射,尝试跨不同的进程边界共享它是没有意义的,因为它几乎总是包含映射内存的损坏阴影,这就是不同步的本质。
Opcache
不提供APC试图提供的任何非选项,所有映射都是匿名完成的。
解决方案使用相同的web服务器,如nginx/lighthttpd,并使用fpm
,包含在PHP
FPM的进程模型允许它派生的子进程有一个共同的缓存,问题解决了,同时适用于APC和Opcache。