鳥哥在博客中說,提高PHP 7性能的幾個tips,第一條就是開啟opcache:
記得啟用Zend Opcache, 因為PHP7即使不啟用Opcache速度也比PHP -5.6啟用了Opcache快,
所以之前測試時期就發生了有人一直沒有啟用Opcache的事情
那麼什麼是Opcache呢?
Opcache 的前生是 Optimizer ,它是PHP的官方公司 Zend 開發的閉源但可以免費使用的 PHP 優化加速元件。 Optimizer 將PHP程式碼預先編譯產生的腳本檔案 Opcode 快取在共享記憶體中以供日後重複使用,避免了從磁碟讀取程式碼再次編譯的時間消耗。同時,它也應用了一些程式碼最佳化模式,使得程式碼執行更快。從而加速PHP的執行。
PHP的正常執行流程如下
request請求(nginx,apache,cli等)-->Zend引擎讀取.php檔-->掃描其字典和表達式-->解析檔-->建立要執行的電腦程式碼(稱為Opcode)-->最後執行Opcode--> response 回傳
每次請求PHP腳本都會執行一遍以上步驟,如果PHP原始碼沒有變化,那麼Opcode也不會變化,顯然沒有必要每次都重新產生Opcode,結合在Web中無所不在的快取機制,我們可以把Opcode快取下來,以後直接存取快取的Opcode豈不是更快,啟用Opcode快取之後的流程圖如下:
Opcode cache的目地是避免重複編譯,減少CPU 和記憶體開銷。
下面介紹Opcache的安裝
安裝:
1、找到opcache的擴展,我的是php7.1
yum list php71*
2、安裝擴充功能
yum install php71w-opcache.x86_64
設定:
zend_extension=opcache.so [opcache] ;开启opcache opcache.enable=1 ;CLI环境下,PHP启用OPcache opcache.enable_cli=1 ;OPcache共享内存存储大小,单位MB opcache.memory_consumption=128 ;PHP使用了一种叫做字符串驻留(string interning)的技术来改善性能。例如,如果你在代码中使用了1000次字符串“foobar”,在PHP内部只会在第一使用这个字符串的时候分配一个不可变的内存区域来存储这个字符串,其他的999次使用都会直接指向这个内存区域。这个选项则会把这个特性提升一个层次——默认情况下这个不可变的内存区域只会存在于单个php-fpm的进程中,如果设置了这个选项,那么它将会在所有的php-fpm进程中共享。在比较大的应用中,这可以非常有效地节约内存,提高应用的性能。 这个选项的值是以兆字节(megabytes)作为单位,如果把它设置为16,则表示16MB,默认是4MB opcache.interned_strings_buffer=8 ;这个选项用于控制内存中最多可以缓存多少个PHP文件。这个选项必须得设置得足够大,大于你的项目中的所有PHP文件的总和。 设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。也就是说在200到1000000之间。 opcache.max_accelerated_files=4000 ;设置缓存的过期时间(单位是秒),为0的话每次都要检查 opcache.revalidate_freq=60 ;从字面上理解就是“允许更快速关闭”。它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器,从而加快PHP的响应速度和PHP进程资源的回收速度,这样应用程序可以更快速地响应下一个请求。把它设置为1就可以使用这个机制了。 opcache.fast_shutdown=1 ;如果启用(设置为1),OPcache会在opcache.revalidate_freq设置的秒数去检测文件的时间戳(timestamp)检查脚本是否更新。 如果这个选项被禁用(设置为0),opcache.revalidate_freq会被忽略,PHP文件永远不会被检查。这意味着如果你修改了你的代码,然后你把它更新到服务器上,再在浏览器上请求更新的代码对应的功能,你会看不到更新的效果 强烈建议你在生产环境中设置为0,更新代码后,再平滑重启PHP和web服务器。 opcache.validate_timestamps=0 ;开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升. 这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在. opcache.file_cache=/tmp
查看phpinfo:
##測試結果:##同樣的介面從以前的幾百毫秒提升到現在的50ms左右
# 推薦教學:《
PHP7以上是利用 Opcache 擴充提升 PHP7 效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!