讓子彈飛~利用OPcache擴充套件提升PHP7效能 | laravel篇
前言
十一點半了,沉澱時間到了。
PHP在執行的時候,存在這樣的一個流程,先將PHP程式碼預編譯,生成位元組碼後再載入到記憶體裡,最後CPU在記憶體上執行編譯後的位元組碼片段。我們會發現,在執行PHP程式的時候,每次都經過這樣的流程,此非浪費Time,是的,很容易聯想到:為何不向C++語言看齊呢,將原始碼編譯成可直接載入到記憶體so哥呢?呃呃。快拿出你的步槍,裝上這顆子彈
OPcache
。自從PHP5.5.0出來後,就內建此zend擴充套件了。
What is OPcacheOPcache
是PHP中的Zend擴充套件,可以大大提升PHP的效能。
OPcache 透過將 PHP 指令碼預編譯的位元組碼儲存到共享記憶體中來提升 PHP 的效能, 儲存預編譯位元組碼的好處就是 省去了每次載入和解析 PHP 指令碼的開銷。
Judge whether it has been extended OPcache
~ php -m | grep OPcache Zend OPcache Zend OPcache
倘若沒有開啟的話,可以在php.ini配置中開啟
/home/samego/service/php7.2/php.ini
~ echo zend_extension="opcache.so" >> /home/samego/service/php7.2/php.ini
About OPcache configure
接下來,我們需要在 PHP 的配置檔案中啟用 OPcache(預設是關閉的):
opcache.enable=1
下面我們繼續對 OPcache 進行一些最佳化配置:
opcache.memory_consumption=512
這個配置表示你想要分配給 OPcache 的記憶體空間(單位:MB),設定一個大於 64 的值即可。
opcache.interned_strings_buffer=64
這個配置表示你想要分配給實際字串的空間(單位:MB),設定一個大於 16 的值即可。
opcache.max_accelerated_files=32531
這個配置表示可以快取多少個指令碼,將這個值儘可能設定為與專案包含的指令碼數接近(或更大)。
opcache.validate_timestamps=0
改配置值用於重新驗證指令碼,如果設定為 0(效能最佳),需要手動在每次 PHP 程式碼更改後手動清除 OPcache。如果你不想要手動清除,可以將其設定為 1 並透過 opcache.revalidate_freq 配置重新驗證間隔,這可能會消耗一些效能,因為需要每隔 x 秒檢查更改。
opcache.save_comments=1
這個配置會在指令碼中保留註釋,我推薦開啟該選項,因為一些庫依賴於這個配置,並且我也找不出什麼關閉它的好處。
opcache.fast_shutdown=0
快速關閉會給一個更快速清理記憶體的機制,不過,在我的基準測試中,更慢一些,可能這會應用帶來一些效能提升,但是你需要自己去嘗試。
所以,最終的配置最佳化長這樣:
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
你可以使用這些配置值進行實驗,具體配置值取決於你的應用大小和伺服器配置。
Laravel OPcache
install
~ composer require appstract/laravel-opcache
configure
~ php artisan vendor:publish --provider="AppstractOpcacheOpcacheServiceProvider" --tag="config"
command
# Clear OPcache: ~ php artisan opcache:clear# Show OPcache config: ~ php artisan opcache:config# Show OPcache status: ~ php artisan opcache:status# Pre-compile your application code: ~ php artisan opcache:optimize
拭目以待的場景測試
個人比較喜歡資料說話
場景:(1)請求GET介面 (2)測試次數10 (3)併發數為100
case non-extension
1000個請求,花費32.32秒,每秒30.94個請求
Transactions: 1000 hits Availability: 100.00 % Elapsed time: 32.32 secs Data transferred: 0.97 MB Response time: 0.32 secs Transaction rate: 30.94 trans/sec Throughput: 0.03 MB/sec Concurrency: 9.96 Successful transactions: 1000 Failed transactions: 0 Longest transaction: 0.44 Shortest transaction: 0.11
case had extend
1000個請求,花費2.94秒,每秒340.14個請求
Transactions: 1000 hits Availability: 100.00 % Elapsed time: 2.94 secs Data transferred: 0.97 MB Response time: 0.03 secs Transaction rate: 340.14 trans/sec Throughput: 0.33 MB/sec Concurrency: 9.86 Successful transactions: 1000 Failed transactions: 0 Longest transaction: 0.29 Shortest transaction: 0.01
作者:AlicFeng
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2819799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讓子彈飛~利用 OPcache 擴充套件提升 PHP7 效能 | Laravel 篇opcache套件PHPLaravel
- 配置php_opcache擴充套件使php7執行更加快速PHPopcache套件
- 《讓PHP擴充套件開拓程式設計前路》 之 效能最佳化利器 OPcachePHP套件程式設計opcache
- php7 安裝rabbitmq 擴充套件PHPMQ套件
- php7 安裝 imagick 擴充套件PHP套件
- 瞭解 OPcache 擴充opcache
- 擴充套件laravel config 元件套件Laravel元件
- [擴充套件推薦]Aliyun-oss-laravel —— Laravel最好的OSS Storage擴充套件套件Laravel
- php7安裝redis6擴充套件PHPRedis套件
- (PHP7核心剖析-11) 模組擴充套件PHP套件
- [擴充套件包] Laravel-wherehasin 提升 ORM 關聯關係查詢效能 (優化 whereHas)套件LaravelORM優化
- pika叢集水平擴充套件——讓效能容量不再受限套件
- Thinkphp實戰利用鉤子使用行為擴充套件 (Hook)PHP套件Hook
- Laravel Octane Workerman 擴充套件包Laravel套件
- 開源 [輪子] Laravel 專案架構擴充套件包Laravel架構套件
- 讓前端的子彈飛-TypeScript前端TypeScript
- 利用 PHP7 的 OPcache 執行 PHP 程式碼PHPopcache
- 利用 phpize 安裝 openssl 擴充套件PHP套件
- Laravel優秀擴充套件包整理Laravel套件
- Laravel homestead 安裝 PHP 擴充套件LaravelPHP套件
- Mac & Linux下php7新增memcached和redis擴充套件MacLinuxPHPRedis套件
- laravel擴充套件包——laravel-dompdf和laravel-snappyLaravel套件APP
- laravel開啟opcache提升載入速度Laravelopcache
- [譯] 9 個 VSCode 擴充套件,讓你的程式碼敲的飛起?VSCode套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Laravel-admin 新增擴充套件介紹Laravel套件
- 1.2 - Laravel 5.6 - Extend 擴充套件機制Laravel套件
- [擴充套件包]-Laravel檢視日誌套件Laravel
- AntDB-M的擴充套件功能,效能提升和熱更新輕鬆搞定套件
- [擴充套件]laravel-xlswriter 一款基於xlswriter的laravel擴充套件包 excel極速讀寫套件LaravelExcel
- 高效擴充套件工具讓 VS Code 如虎添翼套件
- Linux下給php7安裝memcached擴充套件的步驟LinuxPHP套件
- Laravel深入學習7 – 框架的擴充套件Laravel框架套件
- 基於 GatewayWorker 開發的 Laravel 擴充套件GatewayLaravel套件
- 擴充套件包 Laravel-compass 使用筆記套件Laravel筆記
- Laravel-admin 快速開發擴充套件(一)Laravel套件
- 記錄Laravel開發常用擴充套件包Laravel套件
- 分享一個可以提高 Laravel 效能和安全性的擴充套件包工具Laravel套件