使用 Zend Opcache 加速 PHP (2)

來源:互聯網
上載者:User
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 的優點

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

APC 相對 OPTIMIZER+ 的優勢

APC 有資料緩衝 API,而 Optimizer+ 沒有。 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 檔案。

注意:

最好在本地虛擬機器裡測試之後再部署到自己的伺服器上; 安裝前最好先刪除 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 也不是什麼壞事。

操作步驟:

配置使用 epel 安裝源。已有則跳過。 刪除 eaccelerator、xcache、apc:

yum remove php-eaccelerator php-xcache php-apcu

沒有使用則跳過。

對系統執行升級:

yum update

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

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

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

安裝 Zend Opcache(pecl 版本):

yum install php-pecl-zendopcache

安裝時產生的 opcache 的設定檔位於預設的 /etc/php.d 目錄中:

opcache-default.blacklistopcache.ini

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

vi /etc/php.d/opcache.ini

對照如下推薦配置修改並儲存即可(可參考完整的 Zend Opcache 配置資訊):

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

不需要修改 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 GroupZend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies    with Zend OPcache v7.0.1, Copyright (c) 1999-2013, by Zend Technologies

4. 體會

PHP 上有不少 opcode cache 組件,如 APC、eAccelerator、XCache 等。(參見 Wikipedia 上的 PHP accelerators 列表。)看 PHP wiki 上的意思,這個新引入的 Zend Opcache 的效能應該是最好的。不管用哪個組件,總歸是用一個才好。

對於小型的伺服器,似乎這幾個組件的效能差異並不太明顯。我的想法是,既然用了,那就用個最好的吧。但是如果你正在使用別的 opcode cache,比如上面提到的這幾個中的一個,從效能提升上講,倒是沒必要立刻就換。

對這個站,首頁產生時間:僅使用 PHP 的時候,大約 0.9s;使用 eAccelerator 大約 0.63s;使用 Zend Opcache 後大約 0.55s。測試得非常簡陋,多開啟幾次看看 WP Super Cache 提供的頁面產生時間,估計一個平均數。

登入到系統裡看了看 Apache 進程的記憶體佔用。之前一個進程不多大一會兒就能佔用 40MB 以上的記憶體,現在基本上沒有高於 40MB 的了。只是不知道是 php 5.4 的功勞呢,還是 Zend Opcache 的功勞。

不知道您覺得這個 Zend Opcache 的效果如何?如果您有興趣,不妨留言寫下您的測試結果。©

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.