五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > php性能加速Opcache的開(kāi)啟與設(shè)置

php性能加速Opcache的開(kāi)啟與設(shè)置

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):593    更新時(shí)間:2018-06-23 11:54   參與評(píng)論

PHP7已經(jīng)發(fā)布了, 作為PHP10年來(lái)最大的版本升級(jí), 最大的性能升級(jí), PHP7在多放的測(cè)試中都表現(xiàn)出很明顯的性能提升 
image_1b90peukqd3l13v0por7ct1guj9.png-198.3kB

一、開(kāi)啟Opcache

在開(kāi)啟opcache之前,我們先介紹一下編譯與解釋 
編譯器是把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快; 
而解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.

  解釋型語(yǔ)言的實(shí)現(xiàn)中,翻譯器并不產(chǎn)生目標(biāo)機(jī)器代碼,而是產(chǎn)生易于執(zhí)行的中間代碼,這種中間代碼與機(jī)器代碼是不同的,中間代碼的解釋是由軟件支持的,不能直接使用硬件,軟件解釋器通常會(huì)導(dǎo)致執(zhí)行效率較低。用解釋型語(yǔ)言編寫(xiě)的程序是由另一個(gè)可以理解中間代碼的解釋程序執(zhí)行的。與編譯程序不同的是,解釋程序的任務(wù)是逐一將源程序的語(yǔ)句解釋成可執(zhí)行的機(jī)器指令,不需要將源程序翻譯成目標(biāo)代碼后再執(zhí)行。對(duì)于解釋型Basic語(yǔ)言,需要一個(gè)專(zhuān)門(mén)的解釋器解釋執(zhí)行

在很多時(shí)候我們成為編譯,但是它實(shí)際是進(jìn)行解釋的

對(duì)于一個(gè)編譯型程序,它的編譯和執(zhí)行是分開(kāi)的,先編譯成二進(jìn)制可執(zhí)行文件,然后在次執(zhí)行。

  對(duì)于PHP、Python屬于解釋型語(yǔ)言,不產(chǎn)生機(jī)器碼,而是產(chǎn)生中間碼(中間碼是不能直接執(zhí)行,這個(gè)中間嗎只有解釋器可以識(shí)別到,中間碼要靠解析器來(lái)進(jìn)行執(zhí)行) 
比如說(shuō)PHP的解析器是Zend,PHP使用Zend引擎,中間碼我們也稱(chēng)作為操作碼(opcode)

Basic程序,每條語(yǔ)言只有在執(zhí)行才被翻譯。這種解釋型語(yǔ)言每執(zhí)行一次就翻譯一次,因而效率低下。

1、編輯:用編輯軟件(EDIT.EXE或記事本)形成源程序(.ASM),如:LX.ASM; 
2、匯編:用匯編程序(MASM.EXE)對(duì)源程序進(jìn)行匯編,形成目標(biāo)文件(.OBJ),格式如下:MASM LX.ASM; 
3、連接:用連接程序(LINK.EXE)對(duì)目標(biāo)程序進(jìn)行連接,形成可執(zhí)行文件(.EXE),格式如下:LINK LX.OBJ; 
4、執(zhí)行:如果結(jié)果在屏幕在顯示,則直接執(zhí)行可執(zhí)行文件。 
5、調(diào)試:用調(diào)試程序(DEBUG.EXE)對(duì)可執(zhí)行文件進(jìn)行調(diào)試,格式如下:DEBUG LX.EXE

鳥(niǎo)哥在博客中說(shuō),提高PHP 7性能的幾個(gè)tips,第一條就是開(kāi)啟opache,引用下原文:

  記得啟用Zend Opcache, 因?yàn)镻HP7即使不啟用Opcache速度也比PHP-5.6啟用了Opcache快, 
所以之前測(cè)試時(shí)期就發(fā)生了有人一直沒(méi)有啟用Opcache的事情

開(kāi)啟opcache方法 
PHP 5.5+版本以上的,可以使用PHP自帶的opcache開(kāi)啟性能加速(默認(rèn)是關(guān)閉的),PHP5.5之后opcache可以直接--enable-opcache 。對(duì)于PHP 5.5以下版本的,需要使用APC來(lái)進(jìn)行緩存

PHP5.5之前需要使用APC來(lái)進(jìn)行緩存,

PHP opcache 中文手冊(cè)

1. 打開(kāi)php.ini文件 
我使用的是PHP7,關(guān)于php7安裝可以查看我的另一篇文章 
http://theartemis.cn/article/24436 
路徑是在編譯的時(shí)候安裝的

2. 找到:[opcache],設(shè)置為:

[opcache]
; 開(kāi)關(guān)打開(kāi)
opcache.enable=1

; 設(shè)置共享內(nèi)存大小, 單位為:Mb
opcache.memory_consumption=128

;如果啟用,那么 OPcache 會(huì)每隔 opcache.revalidate_freq 設(shè)定的秒數(shù) 檢查腳本是否更新。 如果禁用此選項(xiàng),你必須使用 opcache_reset() 或者 opcache_invalidate() 函數(shù)來(lái)手動(dòng)重置 OPcache,也可以 通過(guò)重啟 Web 服務(wù)器來(lái)使文件系統(tǒng)更改生效。
opcache.validate_timestamps=60

#提示:在opcache使用軟連接的情況下,會(huì)存在opcache沒(méi)有被清除的情況.可以使用重啟fastcgi來(lái)解決這個(gè)問(wèn)題.

windows中打開(kāi)php.ini,查找下 opcache,將代碼設(shè)置為:

[opcache]
; dll地址
zend_extension=php_opcache.dll
; 開(kāi)關(guān)打開(kāi)
opcache.enable=1
; 開(kāi)啟CLI
opcache.enable_cli=1
; 可用內(nèi)存, 酌情而定, 單位為:Mb
opcache.memory_consumption=528
; Zend Optimizer + 暫存池中字符串的占內(nèi)存總量.(單位:MB)
opcache.interned_strings_buffer=8
; 對(duì)多緩存文件限制, 命中率不到 100% 的話, 可以試著提高這個(gè)值
opcache.max_accelerated_files=10000
; Opcache 會(huì)在一定時(shí)間內(nèi)去檢查文件的修改時(shí)間, 這里設(shè)置檢查的時(shí)間周期, 默認(rèn)為 2, 定位為秒
opcache.revalidate_freq=1
; 打開(kāi)快速關(guān)閉, 打開(kāi)這個(gè)在PHP Request Shutdown的時(shí)候回收內(nèi)存的速度會(huì)提高
opcache.fast_shutdown=1

3. 添加opcache.so 
在php.ini最后一行添加opcache.so 主要作用是用來(lái)引用opcache

[root@abcdocker ~]# tail /etc/php.ini zend_extension="opcache.so"

4. 重啟Nginx和php

5. 測(cè)試 
配置完成后,可以使用如下代碼查詢opcache:

<?php
    phpinfo();?>

注意:我們需要在nginx目錄下配置phpinfo測(cè)試文件

訪問(wèn)頁(yè)面得到如下界面:
image_1b90q2jn0fga1mak1ccm1l5b16m39.png-42.4kB

我們除了可以在phpinfo上查看,還可以在php-fpm -m命令進(jìn)行查看

[root@abcdocker ~]# /usr/local/php/sbin/php-fpm -m[PHP Modules]
....
[Zend Modules]Zend OPcache

以下是opcache的配置說(shuō)明:

        OPcache 配置選項(xiàng)

名字默認(rèn)可修改范圍
opcache.enable“1”PHP_INI_ALL
opcache.enable_cli“0”PHP_INI_SYSTEM
opcache.memory_consumption“64”PHP_INI_SYSTEM
opcache.interned_strings_buffer“4”PHP_INI_SYSTEM
opcache.max_accelerated_files“2000”PHP_INI_SYSTEM
opcache.max_wasted_percentage“5”PHP_INI_SYSTEM
opcache.use_cwd“1”PHP_INI_SYSTEM
opcache.validate_timestamps“1”PHP_INI_ALL
opcache.revalidate_freq“2”PHP_INI_ALL
opcache.revalidate_path“0”PHP_INI_ALL
opcache.save_comments“1”PHP_INI_SYSTEM
opcache.load_comments“1”PHP_INI_ALL
opcache.fast_shutdown“0”PHP_INI_SYSTEM
opcache.enable_file_override“0”PHP_INI_SYSTEM
opcache.optimization_level“0xffffffff”PHP_INI_SYSTEM
opcache.inherited_hack“1”PHP_INI_SYSTEM
opcache.dups_fix“0”PHP_INI_ALL
opcache.blacklist_filename“”PHP_INI_SYSTEM
opcache.max_file_size“0”PHP_INI_SYSTEM
opcache.consistency_checks“0”PHP_INI_ALL
opcache.force_restart_timeout“180”PHP_INI_SYSTEM
opcache.error_log“”PHP_INI_SYSTEM
opcache.log_verbosity_level“1”PHP_INI_SYSTEM
opcache.preferred_memory_model“”PHP_INI_SYSTEM
opcache.protect_memory“0”PHP_INI_SYSTEM
opcache.mmap_baseNULLPHP_INI_SYSTEM
opcache.restrict_api“”PHP_INI_SYSTEM

轉(zhuǎn)載:http://php.net/manual/zh/opcache.configuration.php


配置可被設(shè)定范圍

 這些模式?jīng)Q定著一個(gè) PHP 的指令在何時(shí)何地,是否能夠被設(shè)定。手冊(cè)中的每個(gè)指令都有其所屬的模式。例如有些指令可以在 PHP 腳本中用 ini_set() 來(lái)設(shè)定,而有些則只能在 php.ini 或 httpd.conf 中。例如 output_buffering 指令是屬于 PHP_INI_PERDIR,因而就不能用 ini_set() 來(lái)設(shè)定。但是 display_errors 指令是屬于 PHP_INI_ALL 因而就可以在任何地方被設(shè)定,包括 ini_set()。

PHP_INI_* 模式的定義 模式 含義

模式含義
PHP_INI_USER可在用戶腳本(例如 ini_set())或 Windows 注冊(cè)表(自 PHP 5.3 起)以及 .user.ini 中設(shè)定
PHP_INI_PERDIR可在 php.ini,.htaccess 或 httpd.conf 中設(shè)定
PHP_INI_SYSTEM可在 php.ini 或 httpd.conf 中設(shè)定
PHP_INI_ALL可在任何地方設(shè)定
opcache.enable boolean
啟用操作碼緩存。如果禁用此選項(xiàng),則不會(huì)優(yōu)化和緩存代碼。 在運(yùn)行期使用 ini_set() 函數(shù)只能禁用 opcache.enable 設(shè)置,不可以啟用此設(shè)置。 如果在腳本中嘗試啟用此設(shè)置項(xiàng)會(huì)產(chǎn)生警告。

opcache.enable_cli boolean
僅針對(duì) CLI 版本的 PHP 啟用操作碼緩存。 通常被用來(lái)測(cè)試和調(diào)試。

opcache.memory_consumption integer
OPcache 的共享內(nèi)存大小,以兆字節(jié)為單位。

opcache.interned_strings_buffer integer
用來(lái)存儲(chǔ)臨時(shí)字符串的內(nèi)存大小,以兆字節(jié)為單位。 PHP 5.3.0 之前的版本會(huì)忽略此配置指令。

opcache.max_accelerated_files integer
  OPcache 哈希表中可存儲(chǔ)的腳本文件數(shù)量上限。 真實(shí)的取值是在質(zhì)數(shù)集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一個(gè)比設(shè)置值大的質(zhì)數(shù)。 設(shè)置值取值范圍最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。

opcache.max_wasted_percentage integer
 浪費(fèi)內(nèi)存的上限,以百分比計(jì)。 如果達(dá)到此上限,那么 OPcache 將產(chǎn)生重新啟動(dòng)續(xù)發(fā)事件。

opcache.use_cwd boolean
    如果啟用,OPcache 將在哈希表的腳本鍵之后附加改腳本的工作目錄, 以避免同名腳本沖突的問(wèn)題。 禁用此選項(xiàng)可以提高性能,但是可能會(huì)導(dǎo)致應(yīng)用崩潰。

opcache.validate_timestamps boolean
    如果啟用,那么 OPcache 會(huì)每隔 opcache.revalidate_freq 設(shè)定的秒數(shù) 檢查腳本是否更新。 如果禁用此選項(xiàng),你必須使用 opcache_reset() 或者 opcache_invalidate() 函數(shù)來(lái)手動(dòng)重置 OPcache,也可以 通過(guò)重啟 Web 服務(wù)器來(lái)使文件系統(tǒng)更改生效。

opcache.revalidate_freq integer
    檢查腳本時(shí)間戳是否有更新的周期,以秒為單位。 設(shè)置為 0 會(huì)導(dǎo)致針對(duì)每個(gè)請(qǐng)求, OPcache 都會(huì)檢查腳本更新。
    如果 opcache.validate_timestamps 配置指令設(shè)置為禁用,那么此設(shè)置項(xiàng)將會(huì)被忽略。

opcache.revalidate_path boolean
    如果禁用此選項(xiàng),在同一個(gè) include_path 已存在的緩存文件會(huì)被重用。 因此,將無(wú)法找到不在包含路徑下的同名文件。

opcache.save_comments boolean
    如果禁用,腳本文件中的注釋內(nèi)容將不會(huì)被包含到操作碼緩存文件, 這樣可以有效減小優(yōu)化后的文件體積。 禁用此配置指令可能會(huì)導(dǎo)致一些依賴(lài)注釋或注解的 應(yīng)用或框架無(wú)法正常工作, 比如: Doctrine, Zend Framework 2 以及 PHPUnit。

opcache.load_comments boolean
    如果禁用,則即使文件中包含注釋?zhuān)膊粫?huì)加載這些注釋內(nèi)容。 本選項(xiàng)可以和 opcache.save_comments 一起使用,以實(shí)現(xiàn)按需加載注釋內(nèi)容。

opcache.fast_shutdown boolean
    如果啟用,則會(huì)使用快速停止續(xù)發(fā)事件。 所謂快速停止續(xù)發(fā)事件是指依賴(lài) Zend 引擎的內(nèi)存管理模塊 一次釋放全部請(qǐng)求變量的內(nèi)存,而不是依次釋放每一個(gè)已分配的內(nèi)存塊。

opcache.enable_file_override boolean
    如果啟用,則在調(diào)用函數(shù) file_exists(), is_file() 以及 is_readable() 的時(shí)候, 都會(huì)檢查操作碼緩存,無(wú)論文件是否已經(jīng)被緩存。 如果應(yīng)用中包含檢查 PHP 腳本存在性和可讀性的功能,這樣可以提升性能。 但是如果禁用了 opcache.validate_timestamps 選項(xiàng), 可能存在返回過(guò)時(shí)數(shù)據(jù)的風(fēng)險(xiǎn)。

opcache.optimization_level integer
    控制優(yōu)化級(jí)別的二進(jìn)制位掩碼。

opcache.inherited_hack boolean
    在 PHP 5.3 之前的版本,OPcache 會(huì)存儲(chǔ)代碼中使用 DECLARE_CLASS 操作碼 來(lái)實(shí)現(xiàn)繼承的位置。當(dāng)文件被加載之后,OPcache 會(huì)嘗試使用當(dāng)前環(huán)境來(lái)綁定被繼承的類(lèi)。 由于當(dāng)前腳本中可能并不需要 DECLARE_CLASS 操作碼,如果這樣的腳本需要對(duì)應(yīng)的操作碼被定義時(shí), 可能無(wú)法運(yùn)行。
    在 PHP 5.3 及后續(xù)版本中,此配置指令會(huì)被忽略。

opcache.dups_fix boolean
    僅作為針對(duì) “不可重定義類(lèi)”錯(cuò)誤的一種解決方案。

opcache.blacklist_filename string
    OPcache 黑名單文件位置。 黑名單文件為文本文件,包含了不進(jìn)行預(yù)編譯優(yōu)化的文件名,每行一個(gè)文件名。 黑名單中的文件名可以使用通配符,也可以使用前綴。 此文件中以分號(hào)(;)開(kāi)頭的行將被視為注釋。
簡(jiǎn)單的黑名單文件可能如下所示:

; 將特定文件加入到黑名單
/var/www/broken.php
; 以字符 x 文件打頭的文件
/var/www/x
; 通配符匹配
/var/www/*-broken.php
opcache.max_file_size integer
    以字節(jié)為單位的緩存的文件大小上限。設(shè)置為 0 表示緩存全部文件。

opcache.consistency_checks integer
    如果是非 0 值,OPcache 將會(huì)每隔 N 次請(qǐng)求檢查緩存校驗(yàn)和。 N 即為此配置指令的設(shè)置值。 由于此選項(xiàng)對(duì)于性能有較大影響,請(qǐng)盡在調(diào)試環(huán)境使用。

opcache.force_restart_timeout integer
    如果緩存處于非激活狀態(tài),等待多少秒之后計(jì)劃重啟。 如果超出了設(shè)定時(shí)間,則 OPcache 模塊將殺除持有緩存鎖的進(jìn)程, 并進(jìn)行重啟。
    如果選項(xiàng) opcache.log_verbosity_level 設(shè)置為 3 或者 3 以上的數(shù)值,當(dāng)發(fā)生重啟時(shí)將在日志中記錄一條錯(cuò)誤信息。

opcache.error_log string
    OPcache 模塊的錯(cuò)誤日志文件。 如果留空,則視為 stderr, 錯(cuò)誤日志將被送往標(biāo)準(zhǔn)錯(cuò)誤輸出 (通常情況下是 Web 服務(wù)器的錯(cuò)誤日志文件)。

opcache.log_verbosity_level integer
    OPcache 模塊的日志級(jí)別。 默認(rèn)情況下,僅有致命級(jí)別(0)及錯(cuò)誤級(jí)別(1)的日志會(huì)被記錄。 其他可用的級(jí)別有:警告(2),信息(3)和調(diào)試(4)。

opcache.preferred_memory_model string
    OPcache 首選的內(nèi)存模塊。 如果留空,OPcache 會(huì)選擇適用的模塊, 通常情況下,自動(dòng)選擇就可以滿足需求。
    可選值包括: mmap,shm, posix 以及 win32。

opcache.protect_memory boolean
    保護(hù)共享內(nèi)存,以避免執(zhí)行腳本時(shí)發(fā)生非預(yù)期的寫(xiě)入。 僅用于內(nèi)部調(diào)試。

opcache.mmap_base string
    在 Windows 平臺(tái)上共享內(nèi)存段的基地址。 所有的 PHP 進(jìn)程都將共享內(nèi)存映射到同樣的地址空間。 使用此配置指令避免“無(wú)法重新附加到基地址”的錯(cuò)誤。

opcache.restrict_api string
    僅允許路徑是以指定字符串開(kāi)始的 PHP 腳本調(diào)用 OPcache API 函數(shù)。 默認(rèn)值為空字符串 "",表示不做限制。

轉(zhuǎn)載:http://php.net/manual/zh/opcache.configuration.php

二、PHP添加新的模塊

當(dāng)我們PHP想添加新的擴(kuò)張模塊時(shí),可以使用一下方法。當(dāng)然,以下方法是saltstack進(jìn)行安裝拓展模塊的方法

項(xiàng)目一:saltstack 添加PHP memcached模塊

memcache-plugin:
  file.managed:
    - name: /usr/local/src/memcache-2.2.7.tgz    - source: salt://php/files/memcache-2.2.7.tgz    - user: root    - group: root    - mode: 755
  cmd.run:
    - name: cd /usr/local/src && tar zxf memcache-2.2.7.tgz && cd memcache-2.2.7&& /usr/local/php/bin/phpize && ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config &&  make&& make install    - unless: test -f /usr/local/php/lib/php/extensions/*/memcache.so  require:
    - file: memcache-plugin    - cmd: php-install/usr/local/php/etc/php.ini:
  file.append:
    - text:- extension=memcache.so

#溫馨提示:在saltstack中,不要安裝程序的時(shí)候直接復(fù)制原來(lái)的,會(huì)造成ID沖突memcache-plugin

步驟解釋?zhuān)?/span>

1.下載 memcached軟件包

2.使用/usr/local/php/bin/phpize命令進(jìn)行 phpize命令含義:phpize是用來(lái)擴(kuò)展php擴(kuò)展模塊的,通過(guò)phpize可以建立php的外掛模塊

3.在php.ini中添加一條extension=模塊名稱(chēng).so

4.重啟PHP即可


如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (593人查看,0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱(chēng):
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)