在安装 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 当前可以使用的锁定机制包括:
坚持使用默认锁定机制,除非 APC 无法编译。Facebook 的 Brian Shire 测试了锁定机制性能并于 2007 年公布了研究结果;当默认值失败时,您可以使用他的结果来指导您尝试锁定机制。
答案2
不要使用 AB 进行基准测试,而应该使用围城哪个更准确。
答案3
你确定 apc 已启用吗?
php -i | grep apc
仅仅因为它被安装并不意味着它被加载到 php 中