1. 程式人生 > >開啟opcache擴充套件效能前後比較

開啟opcache擴充套件效能前後比較

終端使用ab測試

開啟前

在本地 請求10000  併發200 看看處理情況

剛開始不穩定,瞬間併發,可能直接崩潰,要不就是響應時間超級慢,可以都測試幾次 取平均值

fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   21.576 seconds
Complete requests:      10000
Failed requests:        6222
   (Connect: 0, Receive: 0, Length: 6222, Exceptions: 0)
Non-2xx responses:      6222
Total transferred:      9593262 bytes
HTML transferred:       8031704 bytes
Requests per second:    463.48 [#/sec] (mean)
Time per request:       431.522 [ms] (mean)
Time per request:       2.158 [ms] (mean, across all concurrent requests)
Transfer rate:          434.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  390 2701.7      3   19303
Processing:     0   41  51.7      9     225
Waiting:        0   40  51.3      8     224
Total:          0  430 2701.5     15   19495

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     54
  75%     88
  80%    101
  90%    135
  95%    164
  98%  19298
  99%  19314
 100%  19495 (longest request)
fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      100
Time taken for tests:   22.896 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      20040000 bytes
HTML transferred:       18410000 bytes
Requests per second:    436.76 [#/sec] (mean)
Time per request:       228.957 [ms] (mean)
Time per request:       2.290 [ms] (mean, across all concurrent requests)
Transfer rate:          854.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  202 1760.2      0   19510
Processing:     1   17  44.4     12     786
Waiting:        1   16  43.0     12     784
Total:          1  219 1764.7     12   19521

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     13
  75%     14
  80%     15
  90%     20
  95%     35
  98%   2327
  99%  12212
 100%  19521 (longest request)

 

fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   2.433 seconds
Complete requests:      10000
Failed requests:        6336
   (Connect: 0, Receive: 0, Length: 6336, Exceptions: 0)
Non-2xx responses:      6336
Total transferred:      9401856 bytes
HTML transferred:       7841552 bytes
Requests per second:    4109.75 [#/sec] (mean)
Time per request:       48.665 [ms] (mean)
Time per request:       0.243 [ms] (mean, across all concurrent requests)
Transfer rate:          3773.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3  11.3      3     257
Processing:     0   45  63.3      8     376
Waiting:        0   44  62.9      7     373
Total:          0   48  64.0     13     376

Percentage of the requests served within a certain time (ms)
  50%     13
  66%     46
  75%     81
  80%     98
  90%    139
  95%    167
  98%    247
  99%    290
 100%    376 (longest request)

直接崩了 超時了

fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
apr_pollset_poll: The timeout specified has expired (70007)
Total of 4703 requests completed

 

再者 開啟opcahe

 

 

重啟mamp

然後再次測試

 

fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   2.671 seconds
Complete requests:      10000
Failed requests:        727
   (Connect: 0, Receive: 0, Length: 727, Exceptions: 0)
Non-2xx responses:      727
Total transferred:      18819367 bytes
HTML transferred:       17197364 bytes
Requests per second:    3743.66 [#/sec] (mean)
Time per request:       53.424 [ms] (mean)
Time per request:       0.267 [ms] (mean, across all concurrent requests)
Transfer rate:          6880.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   12  19.3      8     164
Processing:     0   41  36.0     31     211
Waiting:        0   36  34.6     24     197
Total:          0   53  41.1     45     221

Percentage of the requests served within a certain time (ms)
  50%     45
  66%     53
  75%     60
  80%     65
  90%     96
  95%    172
  98%    193
  99%    200
 100%    221 (longest request)
fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   2.671 seconds
Complete requests:      10000
Failed requests:        727
   (Connect: 0, Receive: 0, Length: 727, Exceptions: 0)
Non-2xx responses:      727
Total transferred:      18819367 bytes
HTML transferred:       17197364 bytes
Requests per second:    3743.66 [#/sec] (mean)
Time per request:       53.424 [ms] (mean)
Time per request:       0.267 [ms] (mean, across all concurrent requests)
Transfer rate:          6880.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   12  19.3      8     164
Processing:     0   41  36.0     31     211
Waiting:        0   36  34.6     24     197
Total:          0   53  41.1     45     221

Percentage of the requests served within a certain time (ms)
  50%     45
  66%     53
  75%     60
  80%     65
  90%     96
  95%    172
  98%    193
  99%    200
 100%    221 (longest request)
fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   2.844 seconds
Complete requests:      10000
Failed requests:        534
   (Connect: 0, Receive: 0, Length: 534, Exceptions: 0)
Non-2xx responses:      534
Total transferred:      19143414 bytes
HTML transferred:       17519288 bytes
Requests per second:    3516.38 [#/sec] (mean)
Time per request:       56.877 [ms] (mean)
Time per request:       0.284 [ms] (mean, across all concurrent requests)
Transfer rate:          6573.77 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8  15.0      4     148
Processing:     0   48  49.3     29     248
Waiting:        0   45  47.9     25     247
Total:          1   56  51.3     38     262

Percentage of the requests served within a certain time (ms)
  50%     38
  66%     51
  75%     66
  80%     85
  90%    153
  95%    171
  98%    194
  99%    206
 100%    262 (longest request)
fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   21.576 seconds
Complete requests:      10000
Failed requests:        6222
   (Connect: 0, Receive: 0, Length: 6222, Exceptions: 0)
Non-2xx responses:      6222
Total transferred:      9593262 bytes
HTML transferred:       8031704 bytes
Requests per second:    463.48 [#/sec] (mean)
Time per request:       431.522 [ms] (mean)
Time per request:       2.158 [ms] (mean, across all concurrent requests)
Transfer rate:          434.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  390 2701.7      3   19303
Processing:     0   41  51.7      9     225
Waiting:        0   40  51.3      8     224
Total:          0  430 2701.5     15   19495

Percentage of the requests served within a certain time (ms)
  50%     15
  66%     54
  75%     88
  80%    101
  90%    135
  95%    164
  98%  19298
  99%  19314
 100%  19495 (longest request)
fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
apr_socket_recv: Connection reset by peer (54)
Total of 3363 requests completed
fishMacBook-Air:~ may$ ab -n 10000 -c 200 http://172.17.130.160:7888/index/goodsclass/classlist
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.17.130.160 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.11.4
Server Hostname:        172.17.130.160
Server Port:            7888

Document Path:          /index/goodsclass/classlist
Document Length:        1841 bytes

Concurrency Level:      200
Time taken for tests:   2.626 seconds
Complete requests:      10000
Failed requests:        780
   (Connect: 0, Receive: 0, Length: 780, Exceptions: 0)
Non-2xx responses:      780
Total transferred:      18730380 bytes
HTML transferred:       17108960 bytes
Requests per second:    3808.69 [#/sec] (mean)
Time per request:       52.511 [ms] (mean)
Time per request:       0.263 [ms] (mean, across all concurrent requests)
Transfer rate:          6966.62 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   11  11.9      9     137
Processing:     0   42  33.4     33     185
Waiting:        0   37  32.6     27     183
Total:          0   52  35.1     47     201

Percentage of the requests served within a certain time (ms)
  50%     47
  66%     55
  75%     59
  80%     64
  90%     97
  95%    135
  98%    164
  99%    174
 100%    201 (longest request)
fishMacBook-Air:~ may$ 

 

只想說 開啟opcache後 ,效能提升不少

做個比較

就單看第三項

 

Requests per second:   xxx [#/sec] (mean)吞吐量-每秒請求數
Time per request:      xxxx [ms] (mean)伺服器收到請求,響應頁面要花費的時間
Time per request:      xxx [ms] (mean, across all concurrent requests)併發的每個請求平均消耗時間
延長的問題
 

 

根據自己的需要選擇自己需要配置的選項

[opcache]
zend_extension = "/Applications/MAMP/bin/php/php5.6.30/lib/php/extensions/no-debug-non-zts-20131226/opcahe.so"
 
; Zend Optimizer + 的開關, 關閉時程式碼不再優化.
opcache.enable=1
 
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1
 
 
; Zend Optimizer + 共享記憶體的大小, 總共能夠儲存多少預編譯的 PHP 程式碼(單位:MB)
; 推薦 128
opcache.memory_consumption=64
 
; Zend Optimizer + 暫存池中字串的佔記憶體總量.(單位:MB)
; 推薦 8
opcache.interned_strings_buffer=4
 
 
; 最大快取的檔案數目 200  到 100000 之間
; 推薦 4000
opcache.max_accelerated_files=2000
 
; 記憶體“浪費”達到此值對應的百分比,就會發起一個重啟排程.
opcache.max_wasted_percentage=5
 
; 開啟這條指令, Zend Optimizer + 會自動將當前工作目錄的名字追加到指令碼鍵上,
; 以此消除同名檔案間的鍵值命名衝突.關閉這條指令會提升效能,
; 但是會對已存在的應用造成破壞.
opcache.use_cwd=0
 
 
; 開啟檔案時間戳驗證 
opcache.validate_timestamps=1
 
 
; 2s檢查一次檔案更新 注意:0是一直檢查不是關閉
; 推薦 60
opcache.revalidate_freq=2
 
; 允許或禁止在 include_path 中進行檔案搜尋的優化
;opcache.revalidate_path=0
 
 
; 是否儲存檔案/函式的註釋   如果apigen、Doctrine、 ZF2、 PHPUnit需要檔案註釋
; 推薦 0
opcache.save_comments=1
 
; 是否載入檔案/函式的註釋
;opcache.load_comments=1
 
 
; 開啟快速關閉, 開啟這個在PHP Request Shutdown的時候會收記憶體的速度會提高
; 推薦 1
opcache.fast_shutdown=1
 
;允許覆蓋檔案存在(file_exists等)的優化特性。
;opcache.enable_file_override=0
 
 
; 定義啟動多少個優化過程
;opcache.optimization_level=0xffffffff
 
 
; 啟用此Hack可以暫時性的解決”can’t redeclare class”錯誤.
;opcache.inherited_hack=1
 
; 啟用此Hack可以暫時性的解決”can’t redeclare class”錯誤.
;opcache.dups_fix=0
 
; 設定不快取的黑名單
; 不快取指定目錄下cache_開頭的PHP檔案. /png/www/example.com/public_html/cache/cache_ 
;opcache.blacklist_filename=
 
 
; 通過檔案大小屏除大檔案的快取.預設情況下所有的檔案都會被快取.
;opcache.max_file_size=0
 
; 每 N 次請求檢查一次快取校驗.預設值0表示檢查被禁用了.
; 由於計算校驗值有損效能,這個指令應當緊緊在開發除錯的時候開啟.
;opcache.consistency_checks=0
 
; 從快取不被訪問後,等待多久後(單位為秒)排程重啟
;opcache.force_restart_timeout=180
 
; 錯誤日誌檔名.留空表示使用標準錯誤輸出(stderr).
;opcache.error_log=
 
 
; 將錯誤資訊寫入到伺服器(Apache等)日誌
;opcache.log_verbosity_level=1
 
; 記憶體共享的首選後臺.留空則是讓系統選擇.
;opcache.preferred_memory_model=
 
; 防止共享記憶體在指令碼執行期間被意外寫入, 僅用於內部除錯.
;opcache.protect_memory=0

 

由於我使用的是mamp環境 nginx+mysql+php

php5.6版本

我使用的是預設的配置

 

這只是在本地測試,end opcache會自動在記憶體中快取預先編譯好的php位元組碼,如果快取了某個檔案的位元組碼,就執行對應的位元組碼

因為PHP是弱型別語言,不能直接被機器識別,需要 zend 引擎 處理,經過詞法分析 語法分析,處理成opcode(operator code)

順便說一下PHP7中增加了抽象語法樹的概念.

 

再來看

開啟opcache前後

 

開啟未測試前

 

 

cache hits 命中數 0

cache misses 未命中數 35

使用記憶體12583384

 

 

開啟後測試

 

cache hits 命中數 34326

cache misses 未命中數 54

使用記憶體13610472b

 

瀏覽器訪問方面 我們可以對比看到

未開啟時 平均響應時間在 94-102  前幾次訪問140ms左右

 

開啟後平均響應時間在27-34ms