在安装PHP APC时,我收到了两个意想不到的问题。 我曾经在testing环境中安装过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
有谁知道这些问题是做什么的? 什么适当的答案是?
简短的答案是选项通常可以保留在默认值,您可以将其作为“正确的”答案。
第一个选项(–enable-apc-filehits)可以为apc_cache_info的“filehits”选项收集信息。 基本上,如果您正在debugging与caching相关的问题,可以使用它来确定哪些文件从caching中为每个请求提取。 从apc_cache_info文档:
如果cache_type是“filehits”,则返回当前请求的字节码caching中已经提供了哪些文件的信息。 这个特性必须在编译时使用–enable-filehits来启用。
当涉及到第二个选项(–enable-apc-spinlocks)时, 螺旋锁是一种处理器周期的低效方法,确保在任何给定的时间只有一个进程访问资源。 处理共享内存时,APC使用locking。 APC将caching放置在共享内存中,以便所有PHP进程可以共享caching,并且locking可以确保进程在执行时不会相互访问。
从APC 3.1.9开始,PECL安装程序询问是否启用另外三个选项:内存保护,pthread读/写锁和pthread mutexes,它们分别对应于–enable-apc-memprotect,–enable-apc-pthreadrww和 – 使-APC-pthreadmutex。 前两个标签是实验性的,默认情况下是禁用的; 后者是启用的。
内存保护在某些情况下将共享内存的某些区域视为只读。
Pthread读/写锁和互斥锁是备用locking机制。 APC目前可以使用的locking机制是:
坚持默认的locking机制,除非APC不会编译。 Facebook的Brian Shiretesting了locking机制的性能,并在2007年提交了结果。 当默认失败时,您可以使用他的结果来指导您尝试locking机制。
而不是使用AB作为基准,你应该使用围攻更准确。
你确定APC已启用?
php -i | grep apc
只是因为它安装并不意味着它是在PHP中加载