使用 Zend Opcache 加速 PHP

来源:http://www.cnblogs.com/zhenghongxin/archive/2016/01/26/5160493.html
-Advertisement-
Play Games

Optimizer+ 是 Zend 開發的閉源但可以免費使用的 PHP 優化加速組件,是第一個也是最快的 opcode 緩存工具。現在,Zend 科技公司將 Optimizer+ 在 PHP License下開源成為 Zend Opcache。Zend OPcache 通過 opcode 緩存和優化...


Optimizer+ 是 Zend 開發的閉源但可以免費使用的 PHP 優化加速組件,是第一個也是最快的 opcode 緩存工具。現在,Zend 科技公司將 Optimizer+ 在 PHP License 下開源成為 Zend Opcache。

Zend OPcache 通過 opcode 緩存和優化提供更快的 PHP 執行過程。它將預編譯的腳本文件存儲在共用記憶體中供以後使用,從而避免了從磁碟讀取代碼併進行編譯的時間消耗。同時,它還應用了一些代碼優化模式,使得代碼執行更快。

1. 什麼是 opcode 緩存?

當解釋器完成對腳本代碼的分析後,便將它們生成可以直接運行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode cache 的目地是避免重覆編譯,減少 CPU 和記憶體開銷。如果動態內容的性能瓶頸不在於 CPU 和記憶體,而在於 I/O 操作,比如資料庫查詢帶來的磁碟 I/O 開銷,那麼 opcode cache 的性能提升是非常有限的。但是既然 opcode cache 能帶來 CPU 和記憶體開銷的降低,這總歸是好事 —— 本著環保的態度,也應該儘量減少消耗不是? :D

現代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共用記憶體進行存儲,並且可以直接從中執行文件,而不用在執行前“反序列化”代碼。這將帶來顯著的性能加速,通常降低了整體伺服器的記憶體消耗,而且很少有缺點。

2. Optimizer+ 與 APC 的優缺點對比

Optimizer+ 於 2013年3月中旬改名為 Opcache。

根據 PHP wiki 上的討論,Zend Opcache 即將整合到 php 5.5 中。作為 APC 的競爭對手,新生的 Zend Opcache 很有可能取代 APC 的位置,雖然 OptimizerPlus 沒有象 APC 那樣的 user cache 功能。

OPTIMIZER+ 相對 APC 的優點

  1. 性能。根據測試,Zend Optimizer+ 始終優於 APC。隨代碼差異,每秒鐘處理的請求數高 5~20%。Google doc 上記錄的測試結果中,WordPress 2.1.1(不知道為什麼不用個新版本的 WP 來測試),性能提高約 8%。理論上來說,對於 WP 3.5.1,性能應該也能得到大約 5~10% 的提升吧。對於運行 WordPress 的伺服器而言,使用 Optimizer+ 可以顯著降低 CPU 使用率和提高頁面載入速度(graphics here)。
  2. 支持新的 PHP 版本。Zend 和 PHP 社區都會幫助 Optimizer+ 能夠支持最新版本的 PHP。
  3. 可靠性。Optimizer+ 擁有可選的損壞檢測能力,可以防止因數據損壞而導致的伺服器崩潰。
  4. 更好的相容性。PHP 社區打算讓 Optimizer+ 與社區支持的所有 PHP 版本相相容。

APC 相對 OPTIMIZER+ 的優勢

  1. APC 有數據緩存 API,而 Optimizer+ 沒有。
  2. APC 能夠回收舊的無效的腳本占用的記憶體。APC 有記憶體管理器,可以將那些不再使用的腳本關聯的記憶體進行回收。而 Optimizer+ 不同,它將這樣的記憶體標記為“髒的”,但並不會回收它們。一旦“髒的”記憶體占用配置閾值的百分比達到一定值,Optimizer+ 就將自己重新啟動。這種行為在穩定性上既有優勢也有劣勢。

3. 使用 Zend Opcode

現在已經可以使用 Zend Opcache 替代 APC 作為 PHP 優化加速工具了。目前的 Zend Opcode 相容 PHP 5.2.*、5.3.*、5.4.* 和 PHP-5.5 開發版。不過,將來會取消對 PHP 5.2 的支持。

註意:Zend Opcache 與 eaccelerator 相衝突。要安裝 Zend Opcache,可能需要先卸載 eaccelerator —— 如果你用了這個加速模塊的話。

從源碼安裝並配置

Zend Opcache 的源代碼托管在 github 上,目前還是叫做 ZendOptimizerPlus

安裝步驟詳見其 README 文件。

註意:

  1. 最好在本地虛擬機里測試之後再部署到自己的伺服器上;
  2. 安裝前最好先刪除 eacceleratro、xcache 或 apc 等組件。

順便說一句,從源碼編譯安裝時需要用到 php-devel。README 中快速安裝一節的開頭就用到,

$PHP_DIR/bin/phpize

如果不清楚 phpize 的路徑,可以,

whereis phpize

README 文件中也有相應的推薦優化設置。

從 EPEL 源安裝並配置

我不喜歡從源碼編譯安裝程式,一個是水平有限,一個就是怕麻煩。下麵介紹從 EPEL 安裝源安裝 Zend Opcache,以 CentOS 上的操作為例,基於我的 VPS 的配置

EPEL 社區已經提供了 Zend Opcache 的安裝包,可以直接 yum 安裝。當然,前提是已經配置使用了 EPEL 的安裝源。如果沒有,可以參考這裡

提醒一下,REMI 安裝源上的 PHP 已經是 5.4 版本了。鑒於有人測試說 WordPress 在 PHP 5.4 上的性能要優於在 PHP 5.3 上的性能(10% faster and lower ram consuming),順便升級一下 PHP 也不是什麼壞事。

操作步驟:

  1. 配置使用 epel 安裝源。已有則跳過。
  2. 刪除 eaccelerator、xcache、apc:
    yum remove php-eaccelerator php-xcache php-apcu

    沒有使用則跳過。

  3. 對系統執行升級:
    yum update

    目的是根據 remi 安裝源的狀態升級當前的 php 等軟體到 remi 支持的最新版本。此時,可以看到系統有類似下麵的輸出:

    Updating   : php-common-5.4.14-1.el6.remi.i686                                                         1/26
    
    WARNING : These php-* RPM are not official Fedora / Red Hat build and
    overrides the official ones. Don't file bugs on Fedora Project nor Red Hat.
    
    Use dedicated forums http://forums.famillecollet.com/
    
    warning: /etc/php.ini created as /etc/php.ini.rpmnew
      Updating   : mysql-libs-5.5.31-1.el6.remi.i686                                                         2/26
    
    WARNING : This MySQL RPM is not an official Fedora / Red Hat build and it
    overrides the official one. Don't file bugs on Fedora Project nor Red Hat.
    Use dedicated forums http://forums.famillecollet.com/
    
    warning: /etc/my.cnf created as /etc/my.cnf.rpmnew

    表示我們現在要從 Fedora / Red Hat 的版本遷移到 Remi 版本了,所以不要去 Fedora / Red Hat 尋求幫助了。呵呵,貌似出問題都是在網上找,還真是很少到官方論壇里提問。像我這樣的入門級用戶,也不會遇到那麼深度的問題。

  4. 安裝 Zend Opcache(pecl 版本):
    yum install php-pecl-zendopcache

    安裝時產生的 opcache 的配置文件位於預設的 /etc/php.d 目錄中:

    opcache-default.blacklist
    opcache.ini

    這個配置文件採用的基本就是 README 中的推薦設置,只有幾個地方需要修改。

    vi /etc/php.d/opcache.ini

    對照如下推薦配置修改並保存即可(可參考完整的 Zend 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
  5. 不需要修改 php.ini 配置,重起 Apache 服務使之生效:
    service httpd restart

查詢一下看看是否正確啟動了:

php -v

輸出結果類似於:

PHP 5.4.14 (cli) (built: Apr 11 2013 11:04:35)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with Zend OPcache v7.0.1, Copyright (c) 1999-2013, by Zend Technologies


原文轉載於:http://cnzhx.net/blog/zendopcache-accelerate-php/ 感謝原著

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • $obj_sheet->setCellValueExplicit($cells[$_counter].$i, (isset($val[$_value_key]) ? $val[$_value_key] : ''),PHPExcel_Cell_DataType::TYPE_STRING);
  • 一. commit 和 push 的區別git作為支持分散式版本管理的工具,它管理的庫(repository)分為本地庫、遠程庫。git commit操作的是本地庫,git push操作的是遠程庫。git commit是將本地修改過的文件提交到本地庫中。git push是將本地庫中的最新信息發送給遠...
  • 在CMD命令行中啟動運行startup.bat,啟運程式總是閃退,查看日誌發現如下錯誤:26-Jan-2016 18:12:34.463 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end po...
  • 關於AOP、之前我已寫過一個系列的隨筆: 《自己實現簡單的AOP》,它的關註點在於實現、實現語言是C#,實現方式為 自定義實現RealProxy 抽象類、重寫Invoke方法,以便進行方法調用的攔截、藉此實現AOP。感興趣的園友可以去瞅瞅。 今天、我們來看一下Spring中的AOP,本隨筆著重...
  • 本文翻譯自《effective modern C++》,由於水平有限,故無法保證翻譯完全正確,歡迎指出錯誤。謝謝!如果你曾經同過久的編譯時間鬥爭過,那麼你肯定對Pimpl("point to implementation",指向實現)機制很熟悉了。這種技術讓你把類的數據成員替換成指向一個實現類(或....
  • python3應該是python的趨勢所在,當前目前爭議也比較大,這篇隨筆的主要目的是記錄在linux6.4下搭建python3環境的過程 以及碰到的問題和解決過程。
  • 在任何迴圈語句的主體部分,均可用break控制迴圈的流程。break用於強行退出迴圈,不執行迴圈中剩餘的語句。(break語句還可用於多支語句switch中)continue 語句用於迴圈語句體中,用於終止某次迴圈過程,即跳過迴圈體中尚未執行的語句,接著進行下一次是否執行迴圈的判定。【break的例...
  • 一、寫在前面緩存作為系統性能優化的一大殺手鐧,幾乎在每個系統或多或少的用到緩存。有的使用本地記憶體作為緩存,有的使用本地硬碟作為緩存,有的使用緩存伺服器。但是無論使用哪種緩存,介面中的方法都是差不多。筆者最近的項目使用的是memcached作為緩存伺服器,由於memcached的一些限制,現在想換re...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...