Apache-2.4
Opcache 無法正常工作
我遇到了 Opcache 的問題。它沒有按我的意願/願望工作..
這是我的 opcache 配置
cat /etc/php/7.1/apache2/php.ini | grep opcache [opcache] opcache.enable = 1 opcache.enable_cli = 1 opcache.memory_consumption = 256 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 8882 ;opcache.max_wasted_percentage=5 ;opcache.use_cwd=1 opcache.validate_timestamps = 0 opcache.revalidate_freq = 0 ;opcache.revalidate_path=0 ;opcache.save_comments=1 opcache.fast_shutdown = 1 ;opcache.enable_file_override=0 ;opcache.optimization_level=0xffffffff ;opcache.inherited_hack=1 ;opcache.dups_fix=0 ;opcache.blacklist_filename= ;opcache.max_file_size=0 ;opcache.consistency_checks=0 ;opcache.force_restart_timeout=180 ;opcache.error_log= ;opcache.log_verbosity_level=1 ;opcache.preferred_memory_model= ;opcache.protect_memory=0 ;opcache.restrict_api= ;opcache.mmap_base= ;opcache.file_cache= ;opcache.file_cache_only=0 ;opcache.file_cache_consistency_checks=1 ; Implies opcache.file_cache_only=1 for a certain process that failed to ;opcache.file_cache_fallback=1 ;opcache.huge_code_pages=1 ;opcache.validate_permission=0 ;opcache.validate_root=0
由於我的設置
opcache.validate_timestamps = 0
設置為false,據我所知,修改任何php文件不應該有任何影響,直到我用php函式發布它opcache_reset();
所以我做了一個小測試,我改變了我的 index.php 文件(通過終端)。我插入了一個方法 print_r(opcache_get_status());
這是結果:
array ( [opcache_enabled] => 1 [cache_full] => [restart_pending] => 1 [restart_in_progress] => [memory_usage] => Array ( [used_memory] => 37994008 [free_memory] => 230441448 [wasted_memory] => 0 [current_wasted_percentage] => 0 ) [interned_strings_usage] => Array ( [buffer_size] => 16777216 [used_memory] => 504816 [free_memory] => 16272400 [number_of_strings] => 11672 ) [opcache_statistics] => Array ( [num_cached_scripts] => 64 [num_cached_keys] => 111 [max_cached_keys] => 16229 [hits] => 0 [start_time] => 1513234045 [last_restart_time] => 1513263246 [oom_restarts] => 0 [hash_restarts] => 0 [manual_restarts] => 124 [misses] => 358 [blacklist_misses] => 0 [blacklist_miss_ratio] => 0 [opcache_hit_rate] => 0 ) )
我的問題是結果不
print_r(opcache_get_status());
應該是可見的,因為 my設置為 false 並且只有當我通過方法opcache.validate_timestamps
重新載入 opcache 文件時更改才會生效。opcache_reset();
我是對的還是我錯過了什麼?如果您需要任何其他資訊,請告訴我,我會提供。謝謝!
更新
我發現並非所有文件都在記憶體…執行以下命令
find . -type f -print | grep php | wc -l
報告有 6167 個 php 文件,那麼為什麼只有 64 個 num_cached_scripts
我發現了問題所在。在通過程式碼後我發現,
opcache_reset();
在每個請求之後都有一個實現。刪除該行程式碼後,記憶體正在工作。