PHP APC安装问题

Hal*_*luk 5 php centos apache-2.2

在安装 PHP APC 时,我收到了两个意想不到的问题。我之前在测试环境安装过APC,没有收到这些问题。

问题是:

  • 启用有关从 APC 缓存中使用的文件的每个请求文件信息
  • 启用自旋锁(实验)

以下是最初的几行安装:

# pear install pecl/apc
WARNING: channel "pecl.php.net" has updated its protocols, use "channel-update pecl.php.net" to update
downloading APC-3.1.6.tgz ...
Starting to download APC-3.1.6.tgz (148,835 bytes)
..........................done: 148,835 bytes
49 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
 1. Enable per request file info about files used from the APC cache : no

1-1, 'all', 'abort', or Enter to continue: 
 1. Enable spin locks (EXPERIMENTAL) : no

1-1, 'all', 'abort', or Enter to continue: 
building in /var/tmp/pear-build-root/APC-3.1.6
running: /var/tmp/APC/configure --enable-apc-filehits=no --enable-apc-spinlocks=no
Run Code Online (Sandbox Code Playgroud)

有谁知道这些问题是做什么的?正确的答案是什么?

out*_*tis 6

简短的回答是选项通常可以保留默认值,您可以将其视为“正确”的答案。

第一个选项 (--enable-apc-filehits) 允​​许收集apc_cache_info. 基本上,如果您正在调试与缓存相关的问题,您可以使用它来确定每个请求从缓存中提取哪些文件。从apc_cache_info文档:

如果cache_type是“filehits”,将返回有关当前请求的字节码缓存已提供哪些文件的信息。必须在编译时使用--enable-filehits启用此功能。

当涉及到第二个选项(--enable-apc-spinlocks)时,自旋锁是一种处理器周期低效的方法,可确保在任何给定时间只有一个进程访问资源。APC 在处理共享内存时使用锁。APC 将缓存放在共享内存中,以便所有 PHP 进程都可以共享缓存,并且锁定确保进程在执行此操作时不会相互绊倒。

从 APC 3.1.9 开始,PECL 安装程序询问启用三个附加选项:内存保护、pthread 读/写锁和 pthread 互斥锁,它们对应于 --enable-apc-memprotect、--enable-apc-pthreadrwlocks 和 --启用-apc-pthreadmutex。前两个标记为实验性并默认禁用;后者已启用。

内存保护在某些情况下将共享内存的某些区域视为只读。

Pthread 读/写锁和互斥锁是备用锁定机制。APC目前可以使用的锁定机制有:

  1. 文件锁定 (fcntl)
  2. 信号量
  3. 线程锁
  4. 线程互斥
  5. 超薄读/写锁(仅限 Windows)
  6. 自旋锁

除非 APC 无法编译,否则坚持使用默认锁定机制。Facebook 的 Brian Shire 测试了锁定机制的性能,并在 2007 年提交了结果;当默认设置失败时,您可以使用他的结果来指导您尝试锁定机制。