PHP 5.5的opcache会被FastCGI (mod_fcgi)的进程共享吗?


Will the PHP 5.5 opcache be shared across processes with FastCGI (mod_fcgi)?

我的网站运行在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。