前言
十一點(diǎn)半了,沉淀時(shí)間到了抓歼。
PHP在運(yùn)行的時(shí)候讥此,存在這樣的一個(gè)流程,先將PHP代碼預(yù)編譯谣妻,生成字節(jié)碼后再加載到內(nèi)存里萄喳,最后CPU在內(nèi)存上執(zhí)行編譯后的字節(jié)碼片段。我們會(huì)發(fā)現(xiàn)蹋半,在執(zhí)行PHP程序的時(shí)候他巨,每次都經(jīng)過這樣的流程,此非浪費(fèi)Time减江,是的染突,很容易聯(lián)想到:為何不向C++語言看齊呢,將源碼編譯成可直接加載到內(nèi)存so哥呢辈灼?呃呃??份企。快拿出你的步槍巡莹,裝上這顆子彈
OPcache
司志。自從PHP5.5.0出來后甜紫,就內(nèi)置此zend擴(kuò)展了。
What is OPcache
OPcache
是PHP中的Zend擴(kuò)展骂远,可以大大提升PHP的性能棵介。
OPcache 通過將 PHP 腳本預(yù)編譯的字節(jié)碼存儲(chǔ)到共享內(nèi)存中來提升 PHP 的性能, 存儲(chǔ)預(yù)編譯字節(jié)碼的好處就是 省去了每次加載和解析 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(默認(rèn)是關(guān)閉的):
opcache.enable=1
下面我們繼續(xù)對 OPcache 進(jìn)行一些優(yōu)化配置:
opcache.memory_consumption=512
這個(gè)配置表示你想要分配給 OPcache 的內(nèi)存空間(單位:MB)贸营,設(shè)置一個(gè)大于 64 的值即可吨述。
opcache.interned_strings_buffer=64
這個(gè)配置表示你想要分配給實(shí)際字符串的空間(單位:MB),設(shè)置一個(gè)大于 16 的值即可钞脂。
opcache.max_accelerated_files=32531
這個(gè)配置表示可以緩存多少個(gè)腳本揣云,將這個(gè)值盡可能設(shè)置為與項(xiàng)目包含的腳本數(shù)接近(或更大)。
opcache.validate_timestamps=0
改配置值用于重新驗(yàn)證腳本冰啃,如果設(shè)置為 0(性能最佳)邓夕,需要手動(dòng)在每次 PHP 代碼更改后手動(dòng)清除 OPcache。如果你不想要手動(dòng)清除阎毅,可以將其設(shè)置為 1 并通過 opcache.revalidate_freq 配置重新驗(yàn)證間隔焚刚,這可能會(huì)消耗一些性能,因?yàn)樾枰扛?x 秒檢查更改扇调。
opcache.save_comments=1
這個(gè)配置會(huì)在腳本中保留注釋矿咕,我推薦開啟該選項(xiàng),因?yàn)橐恍煲蕾囉谶@個(gè)配置狼钮,并且我也找不出什么關(guān)閉它的好處碳柱。
opcache.fast_shutdown=0
快速關(guān)閉會(huì)給一個(gè)更快速清理內(nèi)存的機(jī)制,不過熬芜,在我的基準(zhǔn)測試中莲镣,更慢一些,可能這會(huì)應(yīng)用帶來一些性能提升涎拉,但是你需要自己去嘗試瑞侮。
所以,最終的配置優(yōu)化長這樣:
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
你可以使用這些配置值進(jìn)行實(shí)驗(yàn)曼库,具體配置值取決于你的應(yīng)用大小和服務(wù)器配置区岗。
學(xué)習(xí)于Laravel社區(qū)
Laravel OPcache
- install
? ~ composer require appstract/laravel-opcache
- configure
? ~ php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --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
拭目以待的場景測試
個(gè)人比較喜歡數(shù)據(jù)說話
場景:(1)請求GET接口 (2)測試次數(shù)10 (3)并發(fā)數(shù)為100
case non-extension
1000個(gè)請求略板,花費(fèi)32.32秒毁枯,每秒30.94個(gè)請求
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個(gè)請求,花費(fèi)2.94秒叮称,每秒340.14個(gè)請求
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
看到這組數(shù)據(jù)种玛,我甚是高興藐鹤,無比的喜悅。在性能方面赂韵,形成如此鮮明的對比娱节,我二話不說~OPcache is right
(|3[▓▓] 晚安
價(jià)值源于技術(shù),技術(shù)源于分享祭示!