PHP APC配置文件2套和参数详解
一、安装APC
下载http://pecl.php.net/get/APC-3.1.9.tgz
编译参数如下:
./configure--enable-apc--enable-apc-spinlocks--disable-apc-pthreadmutex
安装过程就不说了,标准的php扩展安装模式.
二、2套配置文件
性能高,不适合频繁更新:
apc.enabled=1 apc.stat=0 apc.stat_ctime=0 apc.shm_size=64M apc.shm_segments=1 apc.num_files_hint=1000 apc.ttl=0 apc.slam_defense=0 apc.write_lock=1 apc.file_update_protection=2
性能稍低:
apc.enabled=1 apc.stat=1 apc.stat_ctime=1 apc.shm_size=64M apc.shm_segments=1 apc.num_files_hint=1000 apc.ttl=86400 apc.slam_defense=0 apc.write_lock=1 apc.file_update_protection=2
2套配置关键在于apc.stat,开启后APC将不会检查文件是否更新,这样可以减少大量不必要的系统调用.
但是,对于新发布的问题需要重新启动PHP.可以根据情况选择.
另外,附上参数说明:
apc.enabledboolean
apc.enabled可以设成0来禁用APC.主要是用在当APC被静态编译入PHP时,因为没有其它方法来禁用了(编译为DSO,的时候,可以将php.ini中的extension行注释掉)。
apc.shm_segmentsinteger
编译器缓存要分配的共享内存块的数目。如果APC用光了共享内存但是已经将apc.shm_size设为了系统所能允许的最大值,可以尝试增大此值。
apc.shm_sizeinteger
以MB为单位的每个共享内存块的大小。默认时,有些系统(包括大多数BSD变种)的共享内存块大小非常低。
apc.optimizationinteger
优化级别。设为0则禁用优化器,更高的值则使用更主动的优化。期望非常有限的速度提升。尚在试验中。
apc.num_files_hintinteger
Web服务器上的被包含或被请求的不同源文件的数目的大概估计。如果不确定则设为0或去掉此项;此设定主要用在有数千个源文件的站点。
apc.user_entries_hintinteger
与apc.num_files_hint类似,根据唯一用户数来存储缓存变量。如果不能确定则设置为0或或去掉此项。
apc.ttlinteger
缓存条目在缓冲区中允许逗留的秒数。0表示永不超时。建议值为7200~86400设为0意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。
apc.user_ttlinteger
类似于apc.ttl,只是针对每个用户而言,建议值为7200~86400。设为0意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。如果大于0,APC将尝试删除过期条目。
apc.gc_ttlinteger
缓存条目在垃圾回收表中能够存在的秒数。此值提供了一个安全措施,即在服务器进程在执行缓存的源文件时,如果该文件被修改则旧版本将不会被回收,直到达到此TTL为止。设为零将禁用此特性。
apc.cache_by_defaultboolean
默认为on,但可以设为off并和加号开头的apc.filters一起用,则文件仅在匹配过滤器时被缓存。
apc.filtersstring
一个以逗号分隔的POSIX扩展正则表达式的列表。如果任一个模式匹配源文件名,则该文件不被缓存。注意用来匹配的文件名是传递给include/require的文件名,而不是绝对路径。如果正则表达式的第一个字符是+t则意味着任何匹配表达式的文件会被缓存,如果第一个字符是-则任何匹配项都不会被缓存。-是默认值,可以省略掉。
apc.mmap_file_maskstring
如果使用--enable-mmap(默认启用)为APC编译了MMAP支持,这里的值就是传递给mmap模块的mktemp风格的文件掩码(建议值为"/tmp/apc.XXXXXX")。该掩码用于决定内存映射区域是否要被file-backed或者sharedmemorybacked。对于直接的file-backed内存映射,要设置成"/tmp/apc.XXXXXX"的样子(恰好6个X)。要使用POSIX风格的shm_open/mmap就需要设置成"/apc.shm.XXXXXX"的样子。你还可以设为"/dev/zero"来为匿名映射的内存使用内核的"/dev/zero"接口。不定义此指令则表示强制使用匿名映射。
apc.slam_defenseinteger
在非常繁忙的服务器上,无论是启动服务还是修改文件,都可能由于多个进程企图同时缓存一个文件而导致竞争条件。这个选项用于设置进程在处理未被缓存的文件时跳过缓存步骤的百分率。比如设为75表示在遇到未被缓存的文件时有75%的概率不进行缓存,从而减少碰撞几率。反对使用该指令,鼓励设为0来禁用这个特性。建议该用apc.write_lock指令。
Deprecatedbyapc.write_lock.
apc.file_update_protectioninteger
当你在一个运行中的服务器上修改文件时,你应当执行原子操作。也就是先写进一个临时文件,然后将该文件重命名(mv)到最终的名字。文本编辑器以及cp,tar等程序却并不是这样操作的,从而导致有可能缓冲了残缺的文件。默认值2表示在访问文件时如果发现修改时间距离访问时间小于2秒则不做缓冲。那个不幸的访问者可能得到残缺的内容,但是这种坏影响却不会通过缓存扩大化。如果你能确保所有的更新操作都是原子操作,那么可以用0关闭此特性。如果你的系统由于大量的IO操作导致更新缓慢,你就需要增大此值。
apc.enable_cliinteger
是否为CLI版本启用APC功能,仅用于测试和调试目的才打开此选项。在正常情况下不是理想的创建、填充和销毁CLI的每个请求上的APC缓存,但各种测试方案很有用,能够轻松地使CLI版本的PHPAPC
apc.max_file_sizeinteger
默认1M,对于大于此值的文件将不进行缓存.
apc.statinteger
是否启用脚本更新检查。改变这个指令值要非常小心。默认值On表示APC在每次请求脚本时都检查脚本是否被更新,如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。如果设为Off则表示不进行检查,从而使性能得到大幅提高。但是为了使更新的内容生效,你必须重启Web服务器(译者注:如果采用cgi/fcgi类似的,需重启cgi/fcgi进程)。生产服务器上脚本文件很少更改,可以通过禁用本选项获得显著的性能提升。
这个指令对于include/require的文件同样有效。但是需要注意的是,如果你使用的是相对路径,APC就必须在每一次include/require时都进行检查以定位文件。而使用绝对路径则可以跳过检查,所以鼓励你使用绝对路径进行include/require操作。
apc.write_lockboolean
在繁忙的服务器上,Web服务器第一次被启动,或者很多文件在同一时间被修改,APC可能会多次编译同一个文件,写锁保证只有一个进程将尝试编译并缓存未缓存的脚本。其他进程试图使用该脚本将不使用opcode缓存,而不是锁定和等待缓存生成。
apc.report_autofilterboolean
是否记录所有由于early/latebinding原因而自动未被缓存的脚本。
apc.include_once_overrideboolean
优化include_once()和require_once()函数以避免执行额外的系统调用。
apc.rfc1867boolean
开启监控文件上传进度功能
apc.rfc1867_prefixstring
用于上传文件的缓冲项条目名称前缀
apc.rfc1867_namestring
需要由APC处理的上传文件的隐藏表单项名称
apc.rfc1867_freqstring
用户上传文件缓存项的更新频率。取值可以是总文件大小的百分比,或者以"k","m",or"g"kilobytes,megabytes,orgigabytes结尾的绝对尺寸(大小写不敏感).0表示尽可能快的更新,不过这样可能会导致上传速度下降。
apc.rfc1867_ttlbool
TTLforrfc1867entries.
apc.localcacheboolean
使用非锁定本地进程shadow-cache,它可以减少了向缓冲区写入时锁之间的竞争。
apc.localcache.sizeinteger
Thesizeofthelocalprocessshadow-cache,shouldbesettoasufficientlylargevalue,approximatelyhalfofapc.num_files_hint.
apc.coredump_unmapboolean
启用APC的信号句柄,例如SIGSEGV信号,当信号写入核心文件。当这些信号被接收,APC将试图取消映射的共享内存段,从核心文件中排除它。此设置可以提高系统的稳定性,当接受到致命的信号或者采用APC的大型共享内存段配置方式。
apc.stat_ctimeinteger
验证ctime(创建时间)可以避免SVN或者rsync带来的问题,确保自上次统计inode没有改变。APC通常只检查mtime(修改时间)。
apc.canonicalizebool
如果设置为on,则在no-state模式(不检查文件更新)时会将相对路径改为绝对路径。
apc.preload_pathstring
apc.use_request_timebool
UsetheSAPIrequeststarttimeforTTL.
apc.file_md5bool
记录文件的md5值
apc.lazy_functionsinteger
启用函数延迟加载
apc.lazy_classesinteger
启用类延迟加载