opcache.file_cache我正在嘗試使用控制臺命令通過功能來預熱 opcache 。我的 opcache.ini:opcache.enable=trueopcache.enable_cli=trueopcache.memory_consumption=128opcache.interned_strings_buffer=32opcache.use_cwd=falseopcache.max_file_size=0opcache.max_accelerated_files=32531opcache.validate_timestamps=falseopcache.revalidate_freq=0opcache.enable_file_override=trueopcache.optimization_level='0xFFFFFFFF'opcache.file_update_protection=0opcache.save_comments=falseopcache.file_cache='/tmp/.opcache'opcache.file_cache_consistency_checks=falseopcache.log_verbosity_level=0在開始 php-fpm 進程之前,我通過從 clommand 行執行 scrpt 來編譯文件:$getDirs = static function () use ($argv): array { $dirs = $argv; unset($dirs[0]); return $dirs;};$files = \Symfony\Component\Finder\Finder::create()->in($getDirs()) ->name('*.php') ->ignoreUnreadableDirs() ->notContains('#!/usr/bin/env php') ->notPath(get_included_files()) ->files() ->followLinks();$compiled = 0;foreach ($files as $file) { try { if (!opcache_is_script_cached($file->getRealPath())) { opcache_compile_file($file->getRealPath()); } $compiled++; } catch (Throwable $e) { }}echo 'Cached ' . $compiled . ' files' . PHP_EOL;該腳本將編譯后的文件生成到指定的 ( /tmp/.opcache) 目錄。然后我啟動 php-fpm 進程,但不使用任何預編譯緩存,并且每次重新啟動 php-fpm 進程時 opcache 都會編譯緩存。有沒有一種方法可以在不使用http請求的情況下預編譯opcache?
2 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
添加以下設置
opcache.file_cache_only=1
進入你的php.ini
因為opcache.file_cache_only
已經關閉了。opcache 僅在內存滿時使用文件緩存。所以你想要的opcache必須使用文件緩存。請打開opcache.file_cache_only=1
。

神不在的星期二
TA貢獻1963條經驗 獲得超6個贊
可能有人會發現這個有用通過 CLI 為 php-fpm 預編譯 opcache 確實有效 由于某種原因,它需要太多時間(與內存中存儲的操作碼相比)將緩存文件加載到內存中,但不會重新編譯正在執行的 PHP 文件。
PS 這個技巧甚至適用于不同的 opcache 配置。
- 2 回答
- 0 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消