php 的opcode緩衝apc以及其安裝

來源:互聯網
上載者:User

   先說說php程式的執行流程吧,說明了這個,才好開始我們的最佳化之旅。

  用戶端(譬如瀏覽器)

  —》請求Get hello.php

  —-》cgi伺服器接(譬如apache)收到請求,根據配置尋找php的處理常式(譬如mod_php)

  —-》apache載入php的處理常式,php 的處理常式讀取php.ini初始化php的解釋環境

  —-》mod_php定位尋找hell.php,將其載入到記憶體中來

  —-》mod_php編譯原始碼成為opcode樹

  —-》mod_php執行opcode 樹

  —-》產生結果給瀏覽器

  在這個過程中我們有哪些地方可 以最佳化呢:

  1 將mod_php fast-cgi化,避免每次都要載入這個模組,這個模組還要每次都去初始化php的解釋環境

  2 緩衝php檔案的opcode碼,這樣話,避免每次都去編譯。

  緩衝opcode碼有很多軟體,apc、以及zend提供的cache等。

  轉載一個apc的配置和使用:

  Alternative PHP Cache(APC)是 PHP 的一個免費公開的最佳化代碼緩衝。它用來提供免費,公開並且強健的架構來緩衝和最佳化 PHP 的中間代碼。

  在 Windows 下,APC 要求有 c:/tmp 目錄,並且該目錄要對 Web 服務器進程可寫。

  1. 安裝:

  以PHP extension 形式安裝.

  2. 配置

  apc.enabled boolean

  apc.optimization optimization

  選 項在指令碼中可以改變

  APC PHP.ini配置選項詳解

  [APC]

  ; Alternative PHP Cache 用於緩衝和最佳化PHP中間代碼

  apc.cache_by_default = On

  ;SYS

  ; 是否預設對所有檔案啟用緩衝。

  ; 若設為Off並與以加號開頭的apc.filters指令一起用,則檔案僅在匹配過濾器時才被緩衝。

  apc.enable_cli = Off

  ;SYS

  ; 是否為CLI版本啟用APC功能,僅用於測試和調試目的才開啟此指令。

  apc.enabled = On

  ; 是否啟用APC,如果APC被靜態編譯進PHP又想禁用它,這是唯一的辦法。

  apc.file_update_protection = 2

  ;SYS

  ; 當你在一個運行中的伺服器上修改檔案時,你應當執行原子操作。

  ; 也就是先寫進一個臨時檔案,然後將該檔案重新命名(mv)到最終的名字。

  ; 文字編輯器以及 cp, tar 等程式卻並不是這樣操作的,從而導致有可能緩衝了殘缺的檔案。

  ; 預設值 2 表示在訪問檔案時如果發現修改時間距離訪問時間小於 2 秒則不做緩衝。

  ; 那個不幸的訪問者可能得到殘缺的內容,但是這種壞影響卻不會通過緩衝擴大化。

  ; 如果你能確保所有的更新操作都是原子操作,那麼可以用 0 關閉此特性。

  ; 如果你的系統由於大量的IO操作導致更新緩慢,你就需要增大此值。

  apc.filters =

  ;SYS

  ; 一個以逗號分隔的POSIX擴充Regex列表。

  ; 如果源檔案名稱與任意一個模式比對,則該檔案不被緩衝。

  ; 注意,用來匹配的檔案名稱是傳遞給include/require的檔案名稱,而不是絕對路徑。

  ; 如果Regex的第一個字元是”+”則意味著任何匹配運算式的檔案會被緩衝,

  ; 如果第一個字元是”-”則任何匹配項都不會被緩衝。”-”是預設值,可以省略掉。

  apc.ttl = 0

  ;SYS

  ; 緩衝條目在緩衝區中允許逗留的秒數。0 表示永不逾時。建議值為7200~36000。

  ; 設為 0 意味著緩衝區有可能被舊的緩衝條目填滿,從而導致無法緩衝新條目。

  apc.user_ttl = 0

  ;SYS

  ; 類似於apc.ttl,只是針對每個使用者而言,建議值為7200~36000。

  ; 設為 0 意味著緩衝區有可能被舊的緩衝條目填滿,從而導致無法緩衝新條目。

  apc.gc_ttl = 3600

  ;SYS

  ; 緩衝條目在記憶體回收表中能夠存在的秒數。

  ; 此值提供了一個安全措施,即使一個伺服器處理序在執行緩衝的源檔案時崩潰,

  ; 而且該源檔案已經被修改,為舊版本分配的記憶體也不會被回收,直到達到此TTL值為止。

  ; 設為零將禁用此特性。

  apc.include_once_override = Off

  ;SYS

  ; 關於該指令目前尚無說明文檔,參見:http://pecl.php.net/bugs/bug.php?id=8754

  ; 請保持為Off,否則可能導致意想不到的結果。

  apc.max_file_size = 1M

  ;SYS

  ; 禁止大於此尺寸的檔案被緩衝。

  apc.mmap_file_mask =

  ;SYS

  ; 如果使用–enable-mmap(預設啟用)為APC編譯了MMAP支援,

  ; 這裡的值就是傳遞給mmap模組的mktemp風格的檔案掩碼(建議值為”/tmp/apc.XXXXXX”)。

  ; 該掩碼用於決定記憶體映射地區是否要被file-backed或者shared memory backed。

  ; 對於直接的file-backed記憶體映射,要設定成”/tmp/apc.XXXXXX”的樣子(恰好6個X)。

  ; 要使用POSIX風格的shm_open/mmap就需要設定成”/apc.shm.XXXXXX”的樣子。

  ; 你還可以設為”/dev/zero”來為匿名映射的記憶體使用量核心的”/dev/zero”介面。

  ; 不定義此指令則表示強制使用匿名映射。

  apc.num_files_hint = 1000

  ;SYS

  ; Web伺服器上可能被包含或被請求的不同源檔案的大致數量(建議值為1024~4096)。

  ; 如果你不能確定,則設為 0 ;此設定主要用於擁有數千個源檔案的網站。

  apc.optimization = 0

  ; 最佳化層級(建議值為 0 ) 。

  ; 正整數值表示啟用最佳化器,值越高則使用越激進的最佳化。

  ; 更高的值可能有非常有限的速度提升,但目前尚在實驗中。

  apc.report_autofilter = Off

  ;SYS

  ; 是否記錄所有由於early/late binding原因而自動未被緩衝的指令碼。

  apc.shm_segments = 1

  ;SYS

  ; 為編譯器緩衝區分配的共用記憶體塊數量(建議值為1)。

  ; 如果APC耗盡了共用記憶體,並且已將apc.shm_size指令設為系統允許的最大值,

  ; 你可以嘗試增大此值。

  apc.shm_size = 30

  ;SYS

  ; 每個共用記憶體塊的大小(以MB為單位,建議值為128~256)。

  ; 有些系統(包括大多數BSD變種)預設的共用記憶體塊大小非常少。

  apc.slam_defense = 0

  ;SYS(反對使用該指令,建議該用 apc.write_lock指令)

  ; 在非常繁忙的伺服器上,無論是啟動服務還是修改檔案,

  ; 都可能由於多個進程企圖同時緩衝一個檔案而導致競爭條件。

  ; 這個指令用於設定進程在處理未被緩衝的檔案時跳過緩衝步驟的百分率。

  ; 比如設為75表示在遇到未被緩衝的檔案時有75%的機率不進行緩衝,從而減少碰撞幾率。

  ; 鼓勵設為 0 來禁用這個特性。

  apc.stat = On

  ;SYS

  ; 是否啟用指令碼更新檢查。

  ; 改變這個指令值要非常小心。

  ; 預設值 On 表示APC在每次請求指令碼時都檢查指令碼是否被更新,

  ; 如果被更新則自動重新編譯和緩衝編譯後的內容。但這樣做對效能有不利影響。

  ; 如果設為 Off 則表示不進行檢查,從而使效能得到大幅提高。

  ; 但是為了使更新的內容生效,你必須重啟Web伺服器。

  ; 這個指令對於include/require的檔案同樣有效。但是需要注意的是,

  ; 如果你使用的是相對路徑,APC就必須在每一次include/require時都進行檢查以定位檔案。

  ; 而使用絕對路徑則可以跳過檢查,所以鼓勵你使用絕對路徑進行include/require操作。

  apc.user_entries_hint = 100

  ;SYS

  ; 類似於num_files_hint指令,只是針對每個不同使用者而言。

  ; 如果你不能確定,則設為 0 。

  apc.write_lock = On

  ;SYS

  ; 是否啟用寫入鎖。

  ; 在非常繁忙的伺服器上,無論是啟動服務還是修改檔案,

  ; 都可能由於多個進程企圖同時緩衝一個檔案而導致競爭條件。

  ; 啟用該指令可以避免競爭條件的出現。

  apc.rfc1867 = Off

  ;SYS

  ; 開啟該指令後,對於每個恰好在file欄位之前含有APC_UPLOAD_PROGRESS欄位的上傳檔案,

  ; APC都將自動建立一個upload_的使用者緩衝條目(就是APC_UPLOAD_PROGRESS欄位值)。

  3. 函數:

  apc_cache_info - Retrieves cached information (and meta-data) from APC’s data store

  apc_clear_cache - Clears the APC cache

  apc_define_constants - Defines a set of constants for later retrieval and mass-definition

  apc_delete - Removes a stored variable from the cache

  apc_fetch - Fetch a stored variable from the cache

  apc_load_constants - Loads a set of constants from the cache

  apc_sma_info - Retrieves APC’s Shared Memory Allocation information

  apc_store - Cache a variable in the data store

  apc的用法比較簡單,只有幾個函數,列舉如下。

  apc_cache_info () 返回緩衝資訊

  apc_clear_cache() 清除apc緩衝內容。

  預設(無參數)時,只清除系統緩衝,要清除使用者緩衝,需用‚user‘參數。

  apc_define_constants ( string key, array constants [, bool case_sensitive] ) 將數組constants以常量加入緩衝。

  apc_load_constants (string Key)。

  取出常量緩衝。

  apc_store ( string key, mixed var [, int ttl] )。

  在 緩衝中儲存資料。

  apc_fetch ( string key )。

  獲 得apc_store儲存的緩衝內容

  apc_delete ( string key )。

  刪除apc_store儲存的內容。

  apc 的管理:

  到pecl.php.net下載 apc源碼包有個apc.php,copy到你的web server可以訪問到的地方,瀏覽即可訪問。

  管理介面功能有:

  1. Refresh Data

  2. View Host Stats

  3. System Cache Entries

  4. User Cache Entries

  5. Version Check

  配置php.ini的時候一定要跟進編譯選項來放置這些擴充的位置。

  預設apc.so要放到php.ini同一個目錄下,而不是傳說中 的extension目錄。

  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  安裝apc為php加速

  Alternative PHP Cache(APC)是 PHP 的一個免費公開的最佳化代碼緩衝。它用來提供免費,公開並且強健的架構來緩衝和最佳化 PHP 的中間代碼。

  主要是加速PHP..

  WordPress是一個佔用記憶體的大戶,而且執行效率比較低..

  我安裝了APC後,VPS的整體記憶體降了30M左右吧..

  下面是安裝方法:

  wget http://pecl.php.net/get/APC-3.1.2.tgz

  tar zxvf APC-3.1.2.tgz

  cd APC-3.1.2/

  /usr/local/php/bin/phpize

  ./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config

  make

  make install

  php.ini

  尋找extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

  下面添加extension = "apc.so"

  配置php.ini 末尾加入

  apc.enabled = 1

  apc.cache_by_default = on

  apc.shm_segments = 1

  apc.shm_size = 32

  apc.ttl = 600

  apc.user_ttl = 600

  apc.num_files_hint = 0

  apc.write_lock = On

  然後重啟伺服器就OK

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.