PHP OPcache 配置层

opcache.enable

类型: boolean
默认值: 1
说明: 是否启用 OPcache 扩展

opcache.enable=1  ; 启用
opcache.enable=0  ; 禁用

opcache.enable_cli

类型: boolean
默认值: 0
说明: 是否在 CLI 模式下启用 OPcache

opcache.enable_cli=0  ; CLI 模式禁用(默认)
opcache.enable_cli=1  ; CLI 模式启用

opcache.memory_consumption

类型: integer (MB)
默认值: 128
说明: OPcache 共享内存大小

opcache.memory_consumption=128  ; 128MB(默认)
opcache.memory_consumption=256  ; 256MB(推荐生产环境)
opcache.memory_consumption=512  ; 512MB(大型应用)
计算方式:
所需内存 ≈ (项目文件数 × 平均文件大小 × 1.5) / 1024 / 1024
Laravel 项目: 128-256 MB
检查方法:
$status = opcache_get_status();
echo "已使用: " . $status['memory_usage']['used_memory'] . "\n";
echo "可用: " . $status['memory_usage']['free_memory'] . "\n";
echo "浪费: " . $status['memory_usage']['wasted_memory'] . "\n";

如果 cache_full 为 true,需要增加此值
内存不足会导致缓存失效,性能下降


opcache.interned_strings_buffer

类型: integer (MB)
默认值: 8
说明: 字符串驻留(interned strings)缓存大小

opcache.interned_strings_buffer=8   ; 8MB(默认)
opcache.interned_strings_buffer=16  ; 16MB(推荐)
opcache.interned_strings_buffer=32  ; 32MB(大型应用)

PHP 8.0+ 优化了字符串处理
缓存重复字符串,减少内存占用
通常设置为 memory_consumption 的 10-20%


opcache.max_accelerated_files

类型: integer
默认值: 10000
说明: 最大可缓存文件数量

opcache.max_accelerated_files=10000  ; 默认
opcache.max_accelerated_files=20000  ; 推荐
opcache.max_accelerated_files=50000  ; 大型项目

# 统计项目 PHP 文件数
find . -name "*.php" | wc -l
# 建议设置为实际文件数的 1.5-2 倍
# 必须是质数,OPcache 会自动调整为最近的质数

opcache.validate_timestamps

类型: boolean
默认值: 1
说明: 是否验证文件时间戳

opcache.validate_timestamps=1  ; 每次请求检查文件是否更新(开发环境)
opcache.validate_timestamps=0  ; 不检查,需要手动重置缓存(生产环境)

使用场景:

  • 开发环境: 1 - 代码修改后立即生效
  • 生产环境: 0 - 最佳性能,部署后需重置缓存

性能影响:

  • 0: 最佳性能,无文件系统检查开销
  • 1: 每次请求检查文件修改时间,有性能损耗

重置缓存方法:

php -r "opcache_reset();"  # 命令行
sudo service php8.3-fpm reload  # 重启 PHP-FPM

opcache.revalidate_freq

类型: integer (秒)
默认值: 2
说明: 重新验证文件的时间间隔(仅在 validate_timestamps=1 时有效)

opcache.revalidate_freq=0   ; 每次都检查(开发环境)
opcache.revalidate_freq=2   ; 每 2 秒检查一次(默认)
opcache.revalidate_freq=60  ; 每 60 秒检查一次(测试环境)

opcache.max_life_time

类型: integer (秒)
默认值: 3600
说明: 缓存脚本的最大生存时间

opcache.max_life_time=3600  ; 1 小时(默认)
opcache.max_life_time=7200  ; 2 小时
opcache.max_life_time=0     ; 无限制

opcache.fast_shutdown

类型: boolean
默认值: 0
说明: 快速关闭机制(PHP 7.2+)

opcache.fast_shutdown=1  ; 启用(推荐)
opcache.fast_shutdown=0  ; 禁用

启用后可以更快地清理缓存
对性能有轻微提升

opcache.save_comments

类型: boolean
默认值: 1
说明: 是否保存注释和文档块

opcache.save_comments=1  ; 保存(默认,推荐)保留注释,支持反射、注解等功能
opcache.save_comments=0  ; 不保存

opcache.validate_permission

类型: boolean
默认值: 0
说明: 是否验证文件权限

opcache.validate_permission=0  ; 不验证(默认)
opcache.validate_permission=1  ; 验证权限

opcache.optimization_level

类型: integer (位掩码)
默认值: 0x7FFFBFFF
说明: 优化级别(位标志组合)

opcache.optimization_level=0x7FFFBFFF  ; 全部优化(推荐)
opcache.optimization_level=0x7FFFFFFF  ; 最大优化(PHP 8.0+)

优化标志:
* 0x0001: 常量折叠
* 0x0002: 死代码消除
* 0x0004: 函数调用优化
* 0x0008: 循环优化
* 0x0010: 分支预测
* 0x0020: 内联函数
* 0x0040: 类型推断
* 0x0080: 空值优化
* 0x0100: 数组优化
* 0x0200: 字符串优化
* 0x0400: 类型推断增强
* 0x0800: 常量传播
* 0x1000: 无用代码消除
* 0x2000: 循环展开
* 0x4000: 函数内联
* 0x7FFFBFFF: 所有优化(PHP 7.x)
* 0x7FFFFFFF: 所有优化(PHP 8.0+)

opcache.dups_fix

类型: boolean
默认值: 0
说明: 修复重复文件问题,仅在遇到 "duplicate function" 错误时启用

opcache.dups_fix=0  ; 禁用(默认)
opcache.dups_fix=1  ; 启用

opcache.consistency_checks

类型: integer
默认值: 0
说明: 一致性检查频率

opcache.consistency_checks=0  ; 不检查(默认,推荐)
opcache.consistency_checks=1  ; 每次请求检查
opcache.consistency_checks=10 ; 每 10 次请求检查
生产环境建议 0

opcache.preload

类型: string (文件路径)
默认值: ""
说明: 预加载脚本路径(PHP 7.4+)

opcache.preload=/var/www/html/preload.php

预加载脚本示例 (preload.php):

<?php
// 预加载常用类文件
if (function_exists('opcache_compile_file')) {
    $files = [
        __DIR__ . '/vendor/autoload.php',
        __DIR__ . '/vendor/laravel/framework/src/Illuminate/Foundation/Application.php',
        // 添加更多常用文件
    ];
    foreach ($files as $file) {
        if (file_exists($file)) {
            opcache_compile_file($file);
        }
    }
}

opcache.preload_user

类型: string
默认值: ""
说明: 预加载脚本运行的用户

opcache.preload_user=www-data

opcache.file_cache

类型: string (目录路径)
默认值: ""
说明: 文件缓存目录(PHP 7.0+)

opcache.file_cache=/tmp/opcache

说明:

  • 将编译后的字节码保存到文件系统
  • 重启后可以快速恢复缓存
  • 适合容器化环境

优势:

  • 容器重启后缓存不丢失
  • 多个 PHP 进程共享缓存
  • 减少内存占用

注意事项:

  • 需要确保目录可写
  • 需要定期清理旧缓存文件

opcache.file_cache_only

类型: boolean
默认值: 0
说明: 仅使用文件缓存(不使用共享内存)

opcache.file_cache_only=0  ; 同时使用内存和文件缓存(推荐)
opcache.file_cache_only=1  ; 仅使用文件缓存

opcache.file_cache_consistency_checks

类型: boolean
默认值: 1
说明: 文件缓存一致性检查

opcache.file_cache_consistency_checks=1  ; 检查(默认)
opcache.file_cache_consistency_checks=0  ; 不检查(性能更好)

opcache.file_cache_fallback

类型: boolean
默认值: 1 (PHP 7.1+)
说明: 共享内存失败时是否回退到文件缓存

opcache.file_cache_fallback=1  ; 启用回退(推荐)
opcache.file_cache_fallback=0  ; 禁用回退

常用脚本

检查 OPcache 状态

<?php
if (!function_exists('opcache_get_status')) {
    die("OPcache 未启用\n");
}

$status = opcache_get_status();

echo "=== OPcache 状态 ===\n";
echo "启用状态: " . ($status['opcache_enabled'] ? '是' : '否') . "\n";
echo "缓存已满: " . ($status['cache_full'] ? '是' : '否') . "\n\n";

echo "=== 内存使用 ===\n";
$mem = $status['memory_usage'];
echo "已使用: " . round($mem['used_memory'] / 1024 / 1024, 2) . " MB\n";
echo "可用: " . round($mem['free_memory'] / 1024 / 1024, 2) . " MB\n";
echo "浪费: " . round($mem['wasted_memory'] / 1024 / 1024, 2) . " MB\n";
echo "使用率: " . round($mem['used_memory_percentage'], 2) . "%\n\n";

echo "=== 统计信息 ===\n";
$stats = $status['opcache_statistics'];
echo "命中次数: " . number_format($stats['opcache_hits']) . "\n";
echo "未命中次数: " . number_format($stats['opcache_misses']) . "\n";
$hitRate = $stats['opcache_hit_rate'];
echo "命中率: " . round($hitRate, 2) . "%\n";
echo "缓存脚本数: " . $stats['num_cached_scripts'] . "\n";
echo "缓存键数: " . $stats['num_cached_keys'] . "\n";
echo "最大缓存键数: " . $stats['max_cached_keys'] . "\n";

重置 OPcache

<?php
if (function_exists('opcache_reset')) {
    opcache_reset();
    echo "OPcache 已重置\n";
} else {
    echo "OPcache 未启用\n";
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇