opcache開啟前后性能對比


opcache PHP新的字節碼緩存擴展

字節碼緩存組件 Zend Optimizer+ 現在更改名字為 Zend opcache了。且在php 5.5版本后,會集成到php的官方組件中,也就沒有必要安裝其他的APC,eAccelerator等了。。

APC與Opcache都是字節碼緩存也就是,PHP在被編譯的時候,首先會把php代碼轉換為字節碼,字節碼然后被執行。

php文件第二次執行時,同樣還是會重新轉換為字節碼,但是很多時候,文件內容幾乎是一樣的,比如靜態HTML文件,生成后內容許久都不會改變,用戶訪問請求直接由服務器讀取響應給客戶端瀏覽器。都不用經過PHP進行解析構建了。

內存中的字節碼數據,可以直接緩存進行二次編譯。這樣程序就會快一些,cpu的消耗也少了。

詳細介紹看這兩篇

新一代 PHP 加速插件 Zend Opcache

php的 zend opcache VS apc 性能比較

我主要是用來測試了一下phpcmsV9.5.4 的默認index.php主頁,沒有數據內容,但有sql查詢操作

測試是Apache2.2.6 32Bit 服務器,PHP 5.4.26 ts,mysql 5.6.16 64Bit

ab 版本 This is ApacheBench, Version 2.3 <$Revision: 655654 $>

請求數:1000

並發數:10

沒有加載opcache測試

第一次測試

p

吞吐率 38.46 rps,耗時26.001 s,每個請求耗時260.015 ms

第二次測試

p2

吞吐率有所提高 40.73 rps,耗時 24.554 s,每個請求耗時245.544 ms

加載opcache進行測試

opcache版本 php_opcache-7.0.3-5.4-ts-vc9-x86

opcache配置信息

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

 

 

第一次配置opcache好后 cache 狀態

cstat

 

cache hits 命中數 1

cache misses 未命中數 1

使用內存225.2Kb

opcache第一次測試

p_c1

吞吐率提升到49.11rps,總耗時20.361 s,每個請求耗時下降到203.612 ms

在phpinfo中可查看opcache的命中數量情況

cstat_c

命中數量已達到43957,內存使用2.31Mb。

opcache第二次測試

p_c2

吞吐率提升到47.87rps,總耗時20.888 s,每個請求耗時下降到208.882 ms

opcache之后的兩次壓測數據變化不大,每個請求耗時在1ms差距內,吞吐率也在1~2 rps

但與之前未啟用opcache時,總耗時少了4 ~ 6 s,每個請求耗時少了40 ~ 60 ms。吞吐率也提升了 8%。

這都是在一行代碼未改的情況下有效性能提升。

 

php文件被編譯為字節碼進行內存緩存,如果在生成環境中,代碼和內容變量都是比較固定的

緩存起來的內容就可以高速的返回,用戶會得到較快的響應。

但是在本地開發是,建議不要開啟opcache,否則就得不到最新的值

例如:

<?php
 header('Content-type:text/html; charset=utf-8');
 
 $str = 'abc';
 echo $str; // 輸出abc
?>

 

賦予$str 一個新的值

<?php
 header('Content-type:text/html; charset=utf-8');
 
 $str = 'new abc';
 echo $str; // 輸出的還是 abc
?>

 

這是因為$str 已經被編譯為字節碼了,再次訪問時,內存里面還是可以找到對應的緩存,就沒有進行重新編譯,返回的值也就還是之前的值 abc

不過,opcache有一個參數可以用來設置緩存時間長度

 

默認時間為180秒,還是建議本地不用開啟opcache

 

opcache.force_restart_timeout (default "180")

 

注意:官方給了一個Note,如果opcache要與xdebug同時加載,那么opcache需要在xdebug之前進行加載。

但是我本地測試了一下,xdebug先加載,再加載opcache,也正常啟動了,xdebug,opcache都加載成功,opcache緩存也正常。

不過還是按照官方的建議來安裝加載,否則可能會出現奇怪的錯誤吧。

轉載自天空的顏色


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM