MartinStreicher(mstreicher@linux-mag.com),主編,LinuxMagazine2007年3月20" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[轉]為 PHP 應用提速、提速、再提速!,第 1 部

系統 2811 0
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>


Martin Streicher ( mstreicher@linux-mag.com ), 主編, Linux Magazine

2007 年 3 月 20 日

PHP 是一種腳本語言,常用于創建 Web 應用程序。它易于掌握,并能迅速生成可視化結果。然而,由于 PHP 是以解釋的方式執行的,所以 PHP 代碼每次執行時都會被解析和轉換成操作碼(opcode)。操作碼緩存能消除這項重復的工作,使 PHP 應用程序運行得更快。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

在很短的時間內,PHP 成為了一種非常流行的開發 Web 應用程序的程序設計語言。對初學者來說,PHP 易于安裝和學習。對于有經驗的開發人員而言,PHP(從 V5 開始)提供了強大的面向對象特性。PHP 開發人員擁有龐大的群體,大量的開源及商業庫和工具擴展了該核心語言的功能。PHP 能迅速產生可視化結果,因此備受眾人推崇。

與其他開發 Web 應用程序的腳本語言(包括 Perl、Python 和 Ruby)相似, 每次 HTTP 請求調用時,PHP 代碼都會被解析和翻譯為 操作碼 (PHP 引擎直接執行的原語指令 —— 類似于匯編語言)再執行。在要求很低或可忽略的情況下,服務器看上去能立即執行這個復雜的解釋過程。但是一旦處理的頁面增加,解釋 —— 從本質上說,重復工作 —— 就會對服務器造成很大的負擔。在某些情況下,“編譯” PHP 代碼的時間會遠遠超過執行該代碼所需的時間。因此,當需求增加時,您常常會自食其果,因為處理這些不斷解釋和動態生成的頁面需要消耗更多的系統資源。

若您對處理器和 RAM 的預算沒有限制,那么就大可不必通過優化應用棧(硬件、操作系統、數據庫、Web 服務器和 PHP 代碼)來保證站點的可響應性。然而,由于資金通常都是最缺乏的資源,所以改善性能是必不可少的。調優意味著對系統增加內存、修改操作系統參數、加速 Web 或數據庫服務器、提高代碼效率或者這其中的一些組合。每一項都有其各自的作用。

不要浪費周期 —— 重復使用

節約 CPU 周期的另一種方法是減少運行 PHP 應用程序所需的重復工作。當然,沒有必要每次都把同樣的 PHP 代碼翻譯一遍。PHP 代碼被翻譯成操作碼后,可以把它保存起來并重復使用 —— 直到原始代碼被修改。確實, 緩存 —— 用于保存和重用 PHP 操作碼 —— 是幾種 PHP 加速器內部的機制,包括開源 Alternative PHP Cache (APC)、支持 PHP 的 Turck MMCache、XCache、eAccelerator 和商業 Zend Platform。后三類加速器能夠緩存和優化字節碼,這為系統提供了更多的速度提升。

這個月,我將探究如何安裝、部署和配置 XCache。XCache 相對較新,但是很多站點使用它的效果都很好。此外,XCache 易于構建、安裝和配置,因為它是做為 PHP 擴展實現的。不需對 Apache 和 PHP 進行重編譯。

本文基于 XCache V1.2.0。它可為 PHP V4.3.11 至 V4.4.4、PHP V5.1.x 至 V5.2.x 以及 PHP V6 的早期版本提供可靠支持(XCache 并不支持 PHP V5.0.x)。XCache 兼容 mod_php 和 FastCGI 但并不支持 Common Gateway Interface (CGI) 和命令行 PHP 解釋器。XCache 源代碼能構建在許多系統上,包括 FreeBSD、Sun Solaris、Linux? 和這里所示的 Mac OS X。使用 Cygwin UNIX? 仿真環境或 Visual C,能在 Microsoft? Windows? 上構建 XCache。還可以為 Cygwin 或原生 Win32 構建 XCache。后者與 PHP 的官方 Win32 版本兼容。

本文的演示基于 Apache V2.2.3、PHP V5.2.0、XCache V1.2.0(2006 年 10 月發布)和 Mac OS X V10.4.8 Tiger 上的 Xcode V2.4.1。硬件平臺為配有 2-GHz Intel? Core Duo 處理器和 2 GB RAM 的 Apple MacBook。





回頁首


構建 XCache 的基本步驟

在開始之前,首先確保 PHP 正常安裝并核實 phpize 是否位于 shell 的 PATH 下。同時,還需要一個 C 編譯器,例如 GNU Compiler Collection (GCC),和一組包含 make m4 的開發工具。在 Mac OS X 上,免費的 Xcode 軟件開發環境提供了必需的構建工具。

完成以下操作步驟,在 Mac OS X 上構建、部署 XCache 并對其進行性能檢測。在其他平臺上構建 XCache 與之類似。如果使用 Linux,則其發行版可能已經包含了 XCache 或者已經將其以預先打包好的格式提供給您。

增加 Mac OS X 的共享內存

首先增加 Mac OS X 上留出的共享內存總量。要實現這一目的,需創建(或編輯)文件 /etc/sysctl.conf 并創建如下條目:


清單 1. 增加 Mac OS X 上留出的共享內存總量
              				kern.sysv.shmmax=33554432kern.sysv.shmmin=1kern.sysv.shmmni=32kern.sysv.shmseg=8kern.sysv.shmall=8192
            

這些設置把共享內存總量增加到了 32 MB。如還需進一步擴展共享內存,可以把 kern.sysv.shmall 設定為 kern.sysv.shmmax 除以硬件頁面大小。使用 sysctl hw.pagesize 能獲得硬件頁面大小。例如,假設需要 128 MB 的共享內存,那么設定 kern.sysv.shmmax=134217728 并設定 kern.sysv.shmall=32768

重啟 Mac OS X 使修改生效。重啟后,檢驗新設置是否生效,鍵入:

              sysctl -a | grep kern.sysv
            

通過源代碼構建 XCache

接下來,通過源代碼構建 XCache。從 http://xcache.lighttpd.net 處下載源代碼。下載完后解壓代碼,并轉換到 .tar 文件創建的新目錄。


清單 2. 通過源代碼構建 XCache
              				$ cd /tmp$ wget http://210.51.190.228/pub/XCache/Releases/xcache-1.2.0.tar.gz$ tar xzf xcache-1.2.0.tar.gz$ cd xcache
            

運行 phpize 為編譯 XCache 做準備。


清單 3. 運行 phpize
              				$ phpizeConfiguring for:PHP Api Version:         20020918Zend Module Api No:      20020429Zend Extension Api No:   20050606
            

運行 configure ,創建適合于原生操作系統的 makefile。


清單 4. 運行 configure 創建 makefile
              				$ ./configure --enable-xcache --enable-xcache-coverager checking build system type... i686-apple-darwin8.8.1checking host system type... i686-apple-darwin8.8.1...creating libtoolconfigure: creating ./config.statusconfig.status: creating config.h
            

此處, --enable-xcache 選項包含 XCache 支持, --enable-xcache-coverager 選項包含用于測量加速器功效的附加特性。要啟用操作碼優化,添加 --enable-xcache-optimizer

當然,下一步將使用 make 命令行構建和安裝代碼。運行 make ,然后作為 root 用戶運行 make install


清單 5. 利用 make 構建和安裝代碼
              				$ make...cp ./xcache.so /Users/strike/tmp/xcache/modules/xcache.soBuild complete.$ sudo make installInstalling shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20020429/
            

如果上述兩項操作順利完成,那么 XCache 將位于 /usr/lib/php/extensions/no-debug-non-zts-20020429/xcache.so。(路徑 /usr/lib/php/extensions/no-debug-non-zts-20020429 反映了正在使用的 API 版本和用于構建 PHP 的編譯選項。如果啟用了試用的 Zend Thread Safety 特性,則 "no-debug" 應為 "debug","non-zts" 應為 "zts"。)

修改 php.ini 文件

因為安裝了擴展,所以必需修改 php.ini 文件,使之包含 XCache 擴展并對其進行配置。打開文件 /private/etc/php.ini,在其中添加如下代碼行:


清單 6. 為 XCache 擴展修改 php.ini 文件
              				[xcache-common]zend_extension      = /usr/lib/php/extensions/no-debug-non-zts-20020429/xcache.so[xcache.admin]; Change xcache.admin.user to your preferred login name xcache.admin.user   = "admin"; Change xcache.admin.pass to the MD5 fingerprint of your password; Use md5 -s "your_secret_password" to find the fingerprintxcache.admin.pass   = "0ad72f3f352fcd8acdf266bafd0ac48d"[xcache]; Change xcache.size to tune the size of the opcode cachexcache.size         = 24Mxcache.shm_scheme   = "mmap"xcache.count        = 2xcache.slots        = 8Kxcache.ttl          = 0xcache.gc_interval  = 0; Change xcache.var_size to adjust the size of variable cachexcache.var_size     = 8Mxcache.var_count    = 1xcache.var_slots    = 8Kxcache.var_ttl      = 0xcache.var_maxttl   = 0xcache.var_gc_interval =     300xcache.test         = Offxcache.readonly_protection = Onxcache.mmap_path    = "/tmp/xcache"xcache.coredump_directory =   ""xcache.cacher       = Onxcache.stat         = Onxcache.optimizer    = Off[xcache.coverager]xcache.coverager    = Onxcache.coveragedump_directory = ""
            

注意: 為了簡明起見,此處省略了一些注釋。要了解每個參數的含義,請參閱 XCache 源代碼中 xcache.ini 文件設置的例子。

操作碼和變量緩存的大小是 32 MB,這是 /etc/rc 留出的最大值。對于 Mac OS X, xcache.mmap_path 必須為文件名。因為 PHP 代碼將在 MacBook 上運行,所以 xcache.count 應設為 2,表示 MacBook 中 CPU 的數量。要訪問 XCache 統計信息頁面,需改變 xcache.admin.pass 設置。運行:

              $ md5 -s "
              
                password
              
              "
            

此處 password 為您的密碼。把輸出復制給 xcache.admin.pass 。例如,若需將密碼設定為 op3nsesam3 ,可以運行:

              $ md5 -s "op3nsesam3"MD5 ("op3nsesam3") = cd959ac3debe8f587546a3fa353b3268
            

然后把 cd959ac3debe8f587546a3fa353b3268 復制給 xcache.admin.pass

重啟 Web 服務器

設置好 XCache 后,重啟 Apache Web 服務器。對于大多數系統,可以以 root 用戶的身份使用 apachectl restart 進行重啟。

              $ sudo apachectl restart/usr/sbin/apachectl restart: httpd restarted
            

創建程序以調用 phpinfo()

檢驗 XCache 是否已啟用,需創建一個小型 PHP 程序用于調用 phpinfo() 并在 Web 瀏覽器中打開那個文件。這樣就能看到類似下圖的 XCache 版面。


圖 1. phpinfo() 方法給出了 XCache 設置
phpinfo() 方法給出了 XCache 設置

監控 XCache

要監控 XCache,需安裝 XCache 源代碼的 admin 目錄中的管理頁面。把整個 admin 目錄復制到 Apache 文檔根目錄下。通常來說,Mac OS X 中的文檔根目錄為 /Library/WebServer/Documents。

              $ cp -pr admin /Library/WebServer/Documents
            

復制完成后,使用 sudo apachectl restart 重啟 Web 服務器。用瀏覽器打開 http://localhost/admin,檢驗管理面板是否工作正常。請參閱類似圖 2 的面板。


圖 2. XCache Administration 面板
XCache Administration 面板

測試應用程序

選擇一個或兩個應用程序進行測試。您可以使用自己的代碼或者,如果想要更復雜一點,使用大型的 PHP 應用程序,例如 phpMyAdmin 或者 Serendipity





回頁首


運行性能檢測

Apache HTTP Web 服務器提供了一個叫做 ab 的工具,即 Apache HTTP 服務器性能檢測(benchmark)工具的縮寫。 ab 用于為 PHP 頁面自動化處理大量的請求。phpMyAdmin 應用程序將會是一個很好的選擇,因為它很可能已經安裝到您的系統上了。

ab 工具易于使用:只需提供給它一個重復數和一個 URL。 ab 工具對這個 URL 提交若干次請求并返回統計信息。由于 XCache 已啟用,所以第一個性能檢測顯示了加速后的性能。

在運行 ab 之前,用瀏覽器導航到 http://localhost/phpmyadmin/。訪問這個 PHP 頁面一次,便會加載用來將此頁呈現到緩存內的所有 PHP 代碼。此時,運行如下的性能檢測,重復 100000 次。


清單 7. phpMyAdmin 的性能檢測
              				$ ab -n 100000 http://localhost/phpmyadmin...Concurrency Level:      1Time taken for tests:   14.597 secondsComplete requests:      100000Failed requests:        98262   (Connect: 49131, Length: 49131, Exceptions: 0)Broken pipe errors:     0Non-2xx responses:      50869Total transferred:      25739714 bytesHTML transferred:       12005084 bytesRequests per second:    6850.72 [#/sec] (mean)Time per request:       0.15 [ms] (mean)Time per request:       0.15 [ms] (mean, across all concurrent requests)Transfer rate:          1763.36 [Kbytes/sec] received
            

有用的統計信息包括每秒的請求數和完成所有測試的總時間。對于前者,值越大越好;對于后者,值越小越好。

現在,在 php.ini 文件中禁用 XCache,然后再一次運行性能檢測,如清單 8 所示。可以注釋掉對 XCache 擴展的引用,或者關閉所有的 XCache 特性。再次運行性能檢測之前,需重啟 Apache。


清單 8. 禁用 XCache 時的 phpMyAdmin 性能檢測
              				$ sudo apachectl restart$ ab -n 100000 http://localhost/phpmyadminConcurrency Level:      1Time taken for tests:   17.771 secondsComplete requests:      100000Failed requests:        98256   (Connect: 49128, Length: 49128, Exceptions: 0)Broken pipe errors:     0Non-2xx responses:      50872Total transferred:      25741232 bytesHTML transferred:       12005792 bytesRequests per second:    5627.15 [#/sec] (mean)Time per request:       0.18 [ms] (mean)Time per request:       0.18 [ms] (mean, across all concurrent requests)Transfer rate:          1448.50 [Kbytes/sec] received
            

此處,XCache 禁用之后,每秒的請求數有所下降,表示 Apache 服務器處理每個請求需更長的時間。運行整套測試所需的時間也因此增加了。

盡管這只是一個簡單的性能檢測 —— phpMyAdmin 連接數據庫的功能被禁用了,這樣能限制單獨解釋 PHP 的處理時間 —— 并且不是非常科學,但它確實向我們演示了使用 XCache 能夠完成哪些任務。對于微小的投入(欣慰地是,PHP 或 Apache 不需重編譯),XCache 能產生一個相對較大的回報。代碼越復雜,可能的受益也越大。

若想了解 XCache 是如何有效地運行的,請訪問 http://localhost/xadmin 并單擊 List PHP 。您能看到緩存中的 PHP 文件列表,連同 cache hit、操作碼的代碼大小、源文件的字節大小,等等。圖 3 顯示了 XCache 專門為 XAMPP 棧包構建時的結果。


圖 3. XCache 管理頁面反映了緩存的狀態和內容
XCache 管理頁面反映了緩存的狀態和內容

前面已經提及,XCache 是許多加速器中的一種。在強大的 Zend 軟件中還有許多免費的開源替代方案和一個商業化產品可選。每種 PHP 加速器都有自己的系統需求,所以應主要根據現有的或預期的配置以及應用程序的特性選擇合適的加速器。從中推薦一種很難,但是安裝編譯器緩存是我建議您務必要做的。





回頁首


大量的調優選擇

除了緩存之外,還有許多其他途徑可以加速應用程序。可以通過刪除 PHP 引擎的一些很深奧的特性來簡化它。例如,若不需使用 TCP/IP V6 (IPv6) 網絡,便可在構建 PHP 時禁用該屬性。通過在 PHP 源代碼樹的頂部輸入 ./configure --help 可以參閱 PHP 配置選項的完整列表。無論選擇哪一個配置選項,都應該將:

              --enable-inline-optimization --disable-debug
            

添加到最終的配置命令。前一選項使 PHP 有可能更快地執行(不需使用類似 Zend Engine 的軟件進行額外的操作碼優化);后一選項取消了 PHP 的調試模式,只有當需要解決 PHP 應用服務器本身的問題時才需開啟該模式。

當然,正如一些 C 應用程序,我們能利用 C 編譯器構建更佳的可執行程序。如果把 PHP 作為 Linux 或 FreeBSD 上的 Apache Dynamic Shared Object (DSO) 在 x86 處理器上運行,需考慮在 CFLAGS (存儲 C 編譯器選項的環境變量)中添加 -prefer-non-pic 選項。non-pic 會使用位置獨立的代碼構建 PHP 并能提供 10% 的性能提升。還可以使用 CFLAGS 中的 -march 確定處理器的類型,例如 -march=opteron 表示處理器類型為 AMD Opteron。

提升速度的另一個途徑是 操作碼優化 。此處,Zend Engine 之類的軟件會優化編譯過程中產生的操作碼,這理論上會減少代碼執行的工作總量。

緩存和優化都是透明的,并不需額外的編程。要應用一些優化操作,執行 結構分析 ,或檢查代碼在哪花費了時間。重復的工作既不經濟又運算緩慢,這顯然會產生瓶頸。通過代碼優化彌補周期的不足是很有價值的 —— 但是在結構分析之前不要嘗試進行任何優化。





回頁首


展望未來

在接下來的幾個月我將再次討論優化,會談及調試、快速正文搜索、交替 Web 服務器等內容。同時,還將研究一個或多個 PHP 加速器和操作碼優化器。實現 10% 到 200% 的性能提升只需幾個小時的優化和修補。想像一下您的機器利用這些空閑的周期能做多少事情吧!



參考資料

學習

獲得產品和技術

討論


關于作者

Martin Streicher 是 Linux Magazine 的主編。他從普度大學獲得了計算機科學碩士學位,從 1982 年開始用 Pascal、C、Perl、Java 和(最近)Ruby 編程語言編寫類 UNIX 的系統。

來自: http://www.ibm.com/developerworks/cn/opensource/os-php-fastapps1/index.html




[轉]為 PHP 應用提速、提速、再提速!,第 1 部分: 使用操作碼緩存軟件提升性能和吞吐量


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品久久久久久久 | 日本一本久 | 午夜小视频在线 | jjzzjjzz在线观看 | 亚洲欧美日韩另类精品一区二区三区 | 亚洲国产精品热久久2022 | 午夜精品视频在线 | 日本a级大片 | 97久久国语露脸精品对白 | 亚洲午夜成激人情在线影院 | 你懂的91 | 亚洲一区二区免费看 | 久久久久久久99精品免费观看 | 午夜小视频在线观看 | 国产精品1区2区3区 另类视频综合 | 欧美日韩大片在线观看 | 免费人成网站线观看合集 | 日本高清视频在线播放 | 韩国美女丝袜一区二区 | 欧美精品国产综合久久 | 91tm视频 | 久久婷婷综合五月一区二区 | 狠狠色丁香婷婷综合久久片 | 欧美激情综合亚洲五月蜜桃 | 久久夜夜 | 日韩 欧美 中文 | av一区二区三区在线观看 | 久久大香香蕉国产免费网站 | www.热| 日本视频在线免费观看 | 久久日本精品在线热 | 在线a视频网站 | 国产一级毛片高清 | 国产成人综合网 | 来吧亚洲综合网 | 毛片一级在线 | 亚洲视频国产 | 久久精品呦女 | 色噜噜狠狠先锋影音久久 | 亚洲美女网站 | 免费一级欧美片片线观看 |