php opcache的配置

原理:
其实非常简单,opcache只是把把PHP执行后的数据(opcode)缓存到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的opcode代码从而提高速度,降低服务器负载
效果:
在实际应用当中能使QPS数大致增加3倍以上
注意:
启用opcache后,典型的问题就是由于opcache的缓存加速机制导致的代码变更后无法立即看到效果。php代码被转换成可立即执行的“机器码”后会有一定的缓存时间后才会去检查原始的PHP文件是否变动过,具体视配置项opcache.revalidate_freq设置的秒数情况而定;这样就会导致某些情况下明明更新了PHP文件中的代码,但执行后却看不到改变后的效果,这就是因为opcache检查php文件变动的间隔时间尚未结束所导致。 这个问题并不是bug,而要视具体生产环境来设定opcache.revalidate_freq值,倘若php代码很少变动,建议该值设置的大一些,可减少opcahce由于检查php文件变动而带来的额外开销,比如7200 那么在变动php文件后如何才能快速降低opcache缓存带来的这种问题呢?最简单的方法就是更新代码后重启下php-fpm(nginx fast-cgi模式)或apache(apache-handler模式)。当然还可以自己书写一个php脚本,调用opcache_reset()函数重置所有opcache缓存字节码,或者使用opcache_invalidate(PHPfileDir,true)重置指定php文件的缓存字节码。
参数说明:
  1. [Zend Opcache]
  2. zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
  3. opcache.enable=1 ;启用操作码缓存
  4. opcache.enable_cli=1 ;仅针对CLI环境启用操作码缓存
  5. opcache.memory_consumption=128 ;共享内存大小,单位MB
  6. opcache.interned_strings_buffer=8 ;存储临时字符串的内存大小,单位MB
  7. opcache.max_accelerated_files=4000 ;哈希表中可存储的脚本文件数量上限
  8. ;opcache.max_wasted_percentage=5 ;浪费内存的上限,以百分比计
  9. ;opcache.use_cwd=1;附加改脚本的工作目录,避免同名脚本冲突
  10. opcache.validate_timestamps=1 ;每隔revalidate_freq 设定的秒数 检查脚本是否更新
  11. opcache.revalidate_freq=60 ;
  12. ;opcache.revalidate_path=0 ;如果禁用此选项,在同一个 include_path 已存在的缓存文件会被重用
  13. ;opcache.save_comments=1 ;禁用后将也不会加载注释内容
  14. opcache.fast_shutdown=1 ;一次释放全部请求变量的内存
  15. opcache.enable_file_override=0 ; 如果启用,则在调用函数file_exists(), is_file() 以及 is_readable() 的时候, 都会检查操作码缓存
  16. ;opcache.optimization_level=0xffffffff ;控制优化级别的二进制位掩码。
  17. ;opcache.inherited_hack=1 ;PHP 5.3之前做的优化
  18. ;opcache.dups_fix=0 ;仅作为针对 “不可重定义类”错误的一种解决方案。
  19. ;opcache.blacklist_filename="" ;黑名单文件为文本文件,包含了不进行预编译优化的文件名
  20. ;opcache.max_file_size=0 ;以字节为单位的缓存的文件大小上限
  21. ;opcache.consistency_checks=0 ;如果是非 0 值,OPcache 将会每隔 N 次请求检查缓存校验和
  22. opcache.force_restart_timeout=180 ; 如果缓存处于非激活状态,等待多少秒之后计划重启。
  23. ;opcache.error_log="" ;OPcache模块的错误日志文件
  24. ;opcache.log_verbosity_level=1 ;OPcache模块的日志级别。致命(0)错误(1) 警告(2)信息(3)调试(4)
  25. ;opcache.preferred_memory_model="" ;OPcache 首选的内存模块。可选值包括: mmap,shm, posix 以及 win32。
  26. ;opcache.protect_memory=0 ;保护共享内存,以避免执行脚本时发生非预期的写入。 仅用于内部调试。
  27. ;opcache.mmap_base=null ;在Windows 平台上共享内存段的基地址
配置参考:

[opcache]zend_extension = "G:/PHP/php-5.5.6-Win32-VC11-x64/ext/php_opcache.dll"  ; Zend Optimizer + 的开关, 关闭时代码不再优化.opcache.enable= 1  ; Determines if Zend OPCache is enabled for the CLI version of PHPopcache.enable_cli= 1   ; Zend Optimizer + 共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB); 推荐 128 opcache.memory_consumption= 64  ; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB); 推荐 8 opcache.interned_strings_buffer= 4   ; 最大缓存的文件数目 200 100000 之间; 推荐 4000 opcache.max_accelerated_files= 2000  ; 内存“浪费”达到此值对应的百分比,就会发起一个重启调度.opcache.max_wasted_percentage= 5  ; 开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,; 以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,; 但是会对已存在的应用造成破坏.opcache.use_cwd= 0   ; 开启文件时间戳验证 opcache.validate_timestamps= 1   ; 2s检查一次文件更新 注意: 0 是一直检查不是关闭; 推荐 60 opcache.revalidate_freq= 2  ; 允许或禁止在 include_path 中进行文件搜索的优化;opcache.revalidate_path= 0   ; 是否保存文件/函数的注释 如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释; 推荐 0 opcache.save_comments= 1  ; 是否加载文件/函数的注释;opcache.load_comments= 1   ; 打开快速关闭, 打开这个在PHP Request Shutdown的时候会收内存的速度会提高; 推荐 1 opcache.fast_shutdown= 1  ;允许覆盖文件存在(file_exists等)的优化特性。;opcache.enable_file_override= 1   ; 定义启动多少个优化过程;opcache.optimization_level=0xffffffff  ; 启用此Hack可以暂时性的解决”can’t redeclare class”错误.;opcache.inherited_hack= 1  ; 启用此Hack可以暂时性的解决”can’t redeclare class”错误.;opcache.dups_fix= 0  ; 设置不缓存的黑名单; 不缓存指定目录下cache_开头的PHP文件. /png/www/example.com/public_html/cache/cache_ ;opcache.blacklist_filename=  ; 通过文件大小屏除大文件的缓存.默认情况下所有的文件都会被缓存.;opcache.max_file_size= 0  ; 每 N 次请求检查一次缓存校验.默认值 0 表示检查被禁用了.; 由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启.;opcache.consistency_checks= 0  ; 从缓存不被访问后,等待多久后(单位为秒)调度重启;opcache.force_restart_timeout= 180  ; 错误日志文件名.留空表示使用标准错误输出(stderr).;opcache.error_log=  ; 将错误信息写入到服务器(Apache等)日志;opcache.log_verbosity_level= 1  ; 内存共享的首选后台.留空则是让系统选择.;opcache.preferred_memory_model= ; 防止共享内存在脚本执行期间被意外写入, 仅用于内部调试.;opcache.protect_memory= 0

你可能感兴趣的:(PHP,Linux)