ThinkPHP项目OPcache加速设置

wen PHP项目 6

本文目录导读:

ThinkPHP项目OPcache加速设置

  1. 检查 OPcache 是否已安装
  2. PHP.ini 配置
  3. 针对 ThinkPHP 的优化配置
  4. ThinkPHP 中的配置
  5. Nginx 配置优化
  6. 验证配置生效
  7. 常见问题解决
  8. 性能指标参考
  9. 最佳实践建议

在 ThinkPHP 项目中配置 OPcache 可以显著提升 PHP 执行性能,以下是详细的配置指南:

检查 OPcache 是否已安装

# 查看 PHP 扩展
php -m | grep OPcache
# 或查看详细配置
php -i | grep opcache

PHP.ini 配置

编辑 php.ini 文件,添加或修改以下配置:

[opcache]
; 启用 OPcache
opcache.enable=1
; CLI 模式下启用(仅开发调试时建议开启)
opcache.enable_cli=1
; 内存大小,根据项目大小调整(128MB-512MB)
opcache.memory_consumption=256
; 最大缓存的文件数
opcache.max_accelerated_files=20000
; 检查文件更新时间间隔(秒)
opcache.revalidate_freq=2
; 快速关闭(生产环境推荐)
opcache.fast_shutdown=1
; 验证 HTTPS 证书(默认开启)
opcache.validate_timestamps=1
; 节省内存(字符串驻留)
opcache.interned_strings_buffer=16
; 注释忽略(可以提升性能)
opcache.save_comments=1
; 文件更新检查(开发环境设为 0,生产环境设为 60)
opcache.revalidate_freq=60
; 防止内存溢出
opcache.max_wasted_percentage=5
; 使用绝对路径(防止路径问题)
opcache.use_cwd=1
; 优化级别(生产环境)
opcache.optimization_level=0x7FFFBFFF
; 黑名单文件(可选)
; opcache.blacklist_filename=/path/to/blacklist.txt

针对 ThinkPHP 的优化配置

; 缓存 ThinkPHP 的 Runtime 目录排除(如果需要)
; 不需要特殊配置,TP 会自动管理
; 开发环境配置
opcache.enable=1
opcache.enable_cli=1
opcache.revalidate_freq=0
opcache.validate_timestamps=1
; 生产环境配置
opcache.enable=1
opcache.enable_cli=0
opcache.revalidate_freq=60
opcache.validate_timestamps=0 ; 如果代码不会频繁更新,可以设为 0
opcache.max_accelerated_files=20000

ThinkPHP 中的配置

.env 文件(如果有使用)

[OPCACHE]
; 开启 OPcache 监控
OPCACHE_ENABLE=true
OPCACHE_REVALIDATE_FREQ=60

config/app.php(TP5/TP6)

return [
    // ... 其他配置
    'opcache' => [
        'enable' => env('opcache.enable', true),
        'revalidate_freq' => env('opcache.revalidate_freq', 60),
    ],
];

Nginx 配置优化

# Nginx 配置 fastcgi_cache
location ~ \.php$ {
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    # 启用 fastcgi 缓存(可选)
    fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYCACHE:10m inactive=60m;
    fastcgi_cache MYCACHE;
    fastcgi_cache_valid 200 301 302 60m;
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_cache_lock on;
    fastcgi_cache_key $request_method$request_uri;
}

验证配置生效

创建测试文件

<?php
// opcache_test.php
phpinfo();

通过命令行验证

php -r "var_dump(opcache_get_status());"

监控脚本

<?php
// opcache_monitor.php
$status = opcache_get_status();
echo "Cache Hits: " . $status['opcache_statistics']['hits'] . "\n";
echo "Cache Misses: " . $status['opcache_statistics']['misses'] . "\n";
echo "Free Memory: " . round($status['memory_usage']['free_memory'] / 1024 / 1024, 2) . " MB\n";
echo "Used Memory: " . round($status['memory_usage']['used_memory'] / 1024 / 1024, 2) . " MB\n";

常见问题解决

问题1:代码修改后不生效

; 解决方案
opcache.validate_timestamps=1
opcache.revalidate_freq=0

问题2:内存不足

; 增加内存
opcache.memory_consumption=512
; 或清理缓存
opcache_reset();

问题3:排除特定文件

创建 blacklist.txt

/path/to/runtime/
/path/to/temp/

然后在 php.ini 中:

opcache.blacklist_filename=/etc/php/7.4/opcache-blacklist.txt

性能指标参考

  • 内存命中率:应达到 95% 以上
  • 缓存命中率:应达到 98% 以上
  • 内存使用率:建议控制在 70% 以下

最佳实践建议

  1. 开发环境revalidate_freq=0,以便代码修改立即生效
  2. 生产环境revalidate_freq=60validate_timestamps=0
  3. 缓存大小:根据项目大小设置 128MB-512MB
  4. 监控:定期检查命中率和内存使用情况

通过以上配置,你的 ThinkPHP 项目将获得显著的性能提升,尤其是在高并发场景下。

抱歉,评论功能暂时关闭!