What is Opcache
Every time a PHP script is executed, the script needs to be compiled into bytecode, and OPcache can cache the bytecode, so, The next time the same script is requested, the script does not need to be recompiled, which greatly saves the execution time of the script, allowing the application to run faster and also saving server overhead.
Speak with numbers
Of course we want to know what kind of optimization has been done. Although the performance improvement is highly dependent on the configuration of the application and server, we can run Have a general understanding of benchmarks.
For this purpose, I specially prepared a very low configuration machine: 1 core CPU, 1G memory to run the Apache benchmark test. What I request is the default welcome page of Laravel 5.4, allowing 10 concurrent requests to continue accessing for 1 minute. The following are the benchmark results of turning off OPcache:
OPcache disabled: 10.18 requests per second
For such a low-configuration server, this is not Not bad, but we can do better. The benchmark test results with OPcache turned on are as follows (using the default OPcache configuration):
Enabled with default values: 34.52 requests per second
The gap is still huge! Next, we will optimize the OPcache configuration, and the benchmark test will perform better:
Enabled with optimized values: 42.53 requests per second
Have you been able to use this?
Sounds awesome, but how to use it
First, we need to ensure that OPcache is installed on the server. Starting from PHP 5.5, OPcache has It has become part of the core of PHP, so for Laravel developers, there is basically no need to manually install this extension.
Of course, if you are not sure, you can confirm by looking at phpinfo():
<?php phpinfo();
This script will display all PHP installed extensions. Search for "OPcache" on the page. If found, it proves that it has been installed. If not, you need to install it yourself.
Next, we need to enable OPcache in the PHP configuration file (the default is closed):
opcache.enable=1
Next we continue to make some optimization configurations for OPcache:
opcache.memory_consumption=512
This configuration indicates the memory space (unit: MB) you want to allocate to OPcache. Just set a value greater than 64.
opcache.interned_strings_buffer=64
This configuration indicates the space (unit: MB) you want to allocate to the actual string. Just set a value greater than 16.
opcache.max_accelerated_files=32531
This configuration indicates how many scripts can be cached. Set this value as close as possible to (or greater than) the number of scripts contained in the project.
opcache.validate_timestamps=0
Change the configuration value for revalidation scripts. If set to 0 (best performance), you need to manually clear the OPcache after each PHP code change. If you don't want manual purging, you can set it to 1 and configure the revalidation interval via opcache.revalidate_freq, which may cost some performance since changes need to be checked every x seconds.
opcache.save_comments=1
This configuration will leave comments in the script. I recommend turning this option on because some libraries depend on this configuration and I can't find any benefit of turning it off.
opcache.fast_shutdown=0
Fast shutdown will provide a faster mechanism for clearing memory, however, in my benchmark tests, it is slower. This may bring some performance improvements to the application, but you need to try it yourself.
So, the final configuration optimization looks like this:
opcache.enable=1 opcache.memory_consumption=512 opcache.interned_strings_buffer=64 opcache.max_accelerated_files=32531 opcache.validate_timestamps=0 opcache.save_comments=1 opcache.fast_shutdown=0
You can experiment with these configuration values. The specific configuration values depend on your application size and server configuration.
Finally, save this configuration file and restart the web server, your application will definitely become faster.
Preparing Laravel Application
As mentioned earlier, if opcache.validate_timestamps is set to 0, we need to manually clear the OPcache after each modification of the PHP code. For this purpose, I created an extension package to provide corresponding Artisan commands to handle OPcache cleanup: https://github.com/appstract/laravel-opcache.
After installing the extension, just execute the following command to clean up the OPcache:
php artisan opcache:clear
In addition, the extension package also provides some other useful tools, which you can use in the project's Seen on GitHub page .
This article is reprinted, original address: https://xueyuanjun.com/post/7326
The above is the detailed content of Make your Laravel application run faster! (Utilizing PHP OPcache). For more information, please follow other related articles on the PHP Chinese website!