php.iniphp
# 只用設置成0之後重啓php才能清空preload的文件 opcache.enable = 1 # 配置進行preload的php腳本,php-fpm啓動的時候會先根據這個文件進行預加載 opcache.preload=/home/www/test/preload.php # preload的用戶,不建議使用root opcache.preload_user = www
使用opcache_compile_file進行文件緩存,一旦緩存不會被清除,使用opcache_reset()不會清除預加載的文件,opcache_invalidate()也不能進行清除,使用opcache_get_status()能夠查看緩存佔用的內存大小,以及緩存的文件名laravel
//preload.php $files = glob('/home/www/test/*.php'); foreach ($files as $file) { opcache_compile_file($file); }
//parent.php class A{ public function a(){ echo 'class A'; } }
//child.php require('./parent.php'); class B extends A{ public function b (){ echo 'clsss B'.PHP_EOL; } }
//conf.php return array_fill(0,20,'abc');
//index.php <?php require('./child.php'); require('./conf.php'); opcache_reset(); print_r(opcache_get_status()); $obj = new B; $obj->b();
ab -c 1 -n 10000 緩存
開啓預加載php-fpm
Concurrency Level: 1 Time taken for tests: 2.864 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 1620000 bytes HTML transferred: 160000 bytes Requests per second: 3492.01 [#/sec] (mean) Time per request: 0.286 [ms] (mean) Time per request: 0.286 [ms] (mean, across all concurrent requests) Transfer rate: 552.45 [Kbytes/sec] received
未開啓預加載性能
Concurrency Level: 1 Time taken for tests: 4.043 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 1860000 bytes HTML transferred: 400000 bytes Requests per second: 2473.23 [#/sec] (mean) Time per request: 0.404 [ms] (mean) Time per request: 0.404 [ms] (mean, across all concurrent requests) Transfer rate: 449.24 [Kbytes/sec] received
Laravel7預加載測試 ab -c 1 -n 1000測試
//preload.php function a($path){ $files = glob($path.'*'); // print_r($files); foreach($files as $file){ if(is_dir($file)){ a($file.'/'); }else{ //使用pathinfo 而後獲取extension 報錯,php啓動不起來 if(basename($file) == 'index.php'){ continue; } if(strstr($file,'.' ) == '.php'){ opcache_compile_file($file); } } } } a('/home/www/test/Laravel7/vendor/laravel/');
未開啓預加載ui
Concurrency Level: 1 Time taken for tests: 100.983 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 3355000 bytes HTML transferred: 2426000 bytes Requests per second: 9.90 [#/sec] (mean) Time per request: 100.983 [ms] (mean) Time per request: 100.983 [ms] (mean, across all concurrent requests) Transfer rate: 32.44 [Kbytes/sec] received
開啓預加載Laravel, 只緩存vendor/laravel/ 目錄code
Concurrency Level: 1 Time taken for tests: 12.377 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 3355000 bytes HTML transferred: 2426000 bytes Requests per second: 80.79 [#/sec] (mean) Time per request: 12.377 [ms] (mean) Time per request: 12.377 [ms] (mean, across all concurrent requests) Transfer rate: 264.71 [Kbytes/sec] received