首頁 後端開發 php教程 使用 Zend Opcache 加快 PHP

使用 Zend Opcache 加快 PHP

Jun 13, 2016 pm 12:28 PM
nbsp opcache php zend

使用 Zend Opcache 加速 PHP

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/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 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/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 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.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
    登入後複製
  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 GroupZend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies    with Zend OPcache v7.0.1, Copyright (c) 1999-2013, by Zend Technologies<br><br><br><span style="font-size: 16px;"><strong><span style="font-size: 14px;">原文转载于:http://cnzhx.net/blog/zendopcache-accelerate-php</span></strong>/ 感谢原著</span>
登入後複製

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles