PHP Opcache 注意事项以及调优

本文探讨了PHP Opcache的优化,包括内存管理、时间戳验证的利弊,以及如何避免不必要的文件系统调用。通过调整内存消耗、缓存文件数量和浪费百分比,以及禁用时间戳验证,可以显著提高PHP性能。测试显示,正确的Opcache配置可以减少延迟,提高应用程序响应速度。
摘要由CSDN通过智能技术生成

从 PHP5.5 开始,Opcache 扩展是核心的一部分,增加了对 PHP 脚本的字节码缓存的支持。对于动态语言(例如 PHP ),字节码缓存可以显著的提高性能,因为它可以确保脚本仅被编译一次。

Opcache 扩展的默认设置已经在很大程度上提高了 PHP 的性能,但是您可以通过修改默认配置以获取更佳的性能。

警告:这篇文章反复提到的监视统计信息 opcache_get_status(false)。因为 Opcache 为每个 SAPI 使用唯一的共享内存池,所以您无法从控制台访问 Web 服务器统计信息。该调用必须通过 Apache 或 PHP-FPM 进行。

 

当内存太小时,应避免一些不正确的缓存方式

Opcache 默认使用 64 MB 内存来保存编译后的 PHP 脚本以及最多 3907 个 PHP 脚本。 虽然这足以缓存您的 PHP 脚本,但有一些需要注意的:

  • 如果您的应用会生成 (PHP) 代码或者使用基于 PHP 文件的缓存 (例如: Symfony, Doctrine Annotations, FLOW3), 那么可能会有大量 PHP 文件不会被 Opcache 缓存
  • 如果您开启了 validate_timestamps 时间戳验证并在生产环境中修改了代码,那么旧的缓存条目将被标记为过期,这种过期的缓存条目会增加 Opcache 的内存消耗
  • 如果您使用每个版本部署到新目录的部署策略,则 Opcache 会将不同目录下的同一个 PHP 文件进行多次缓存,这样也会快速的占用 Opcache 的内存使用

当 Opcache 在某些情况下内存满时,它将擦除所有缓存条目并从空缓存开始。 如果发生这种情况,并且您的服务器流量很大,这可能会导致 thundering herd problem 或缓存猛击:许多请求同时生成相同的缓存条目。

你要避免 Opcache 用空的缓存重新启动。

检测 opcache 是否 “已满” 的算法取决于三个不同 INI 设置之间的直观交互,目前尚无记录。 它有助于深入理解 C 代码来理解它。

三个相关的 ini 变量定义如下:

-opcache.memor

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值