【发布时间】:2014-06-20 00:50:06
【问题描述】:
我的网站使用 FastCGI (mod_fcgi) 在 PHP 5.5 上运行。我知道其他 opcache 类型(如 APC)不能很好地工作,因为 内存不在 php-cgi 进程之间共享 (here)。
我正在使用 PHP 5.5 内置的 OPcache。是进程之间共享内存还是这与mod_fcgi的APC/Xcache完全相同的问题?
有什么方法可以测试吗?
【问题讨论】:
我的网站使用 FastCGI (mod_fcgi) 在 PHP 5.5 上运行。我知道其他 opcache 类型(如 APC)不能很好地工作,因为 内存不在 php-cgi 进程之间共享 (here)。
我正在使用 PHP 5.5 内置的 OPcache。是进程之间共享内存还是这与mod_fcgi的APC/Xcache完全相同的问题?
有什么方法可以测试吗?
【问题讨论】:
我一直不明白为什么这甚至被认为是一种可能性,这不是一个现实的可能性:
APC 和 Opcache 都有几种共享内存形式,它们的默认值和最合适的类型是 mmap'd 内存,但是由于各种奇怪的原因它们需要支持劣质类型,这些劣质类型都没有可能(甚至是一个不切实际的) 来工作。
说到mmap...
如果您不提供文件掩码 APC 使用匿名共享映射,则您无法跨不同的进程边界共享它,这是不可能的。
如果您确实提供了文件掩码,APC 使用非同步共享映射,尝试跨不同进程边界共享它是没有意义的,因为它几乎总是包含映射内存的损坏影子,这就是不同步。
不向您提供 APC 试图提供的任何非选项,所有映射都是匿名完成的。
使用健全的网络服务器,例如 nginx/lighthttpd,并使用 PHP 中包含的 fpm。
FPM 的进程模型允许它 fork 的子进程有一个共同的缓存,问题已解决,适用于 APC 和 Opcache。
【讨论】: