PHP APC 安装问题

PHP APC 安装问题

在安装 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

有人知道这些问题是干什么的吗?正确的答案是什么?

答案1

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

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

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

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

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

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

Pthread 读/写锁和互斥锁是交替的锁定机制。APC 当前可以使用的锁定机制包括:

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

坚持使用默认锁定机制,除非 APC 无法编译。Facebook 的 Brian Shire 测试了锁定机制性能并于 2007 年公布了研究结果;当默认值失败时,您可以使用他的结果来指导您尝试锁定机制。

答案2

不要使用 AB 进行基准测试,而应该使用围城哪个更准确。

答案3

你确定 apc 已启用吗?

php -i | grep apc 

仅仅因为它被安装并不意味着它被加载到 php 中

相关内容