By:0x584A Date:2016-04-07 21:58:06
前言
這幾天都在找工作,無意中看到企業(yè)招聘中有標注需要懂PHP調(diào)優(yōu)
,然后發(fā)現(xiàn)自己還停留在APC模塊的層面歹篓,趕緊惡補一下PHP相關優(yōu)化儡湾,寫下該筆記媳否。
1. PHP5-APC/PHP5-APCu
從最配置LNMP環(huán)境時就知道APC這個模塊的好處栅螟,所以每次安裝環(huán)境的時候荆秦,基本上這個模塊我都會安裝上去。
-
apt-get 一建安裝
sudo apt-get install php5-apc
注意:我本機PHP安裝版本是PHP 5.6.11 所以裝的擴展是PHP5-APCU力图,查看了APC的最后PIP上發(fā)布的時間是2012年步绸,而APCU對新版本提供新的支持項。
APC是一個通過緩存PHP源碼和用戶變量吃媒,來高效顯著加速你的PHP程序的opcode緩存瓤介。在應用中使用APC,通常伴隨著提升程序響應時間赘那、減輕服務器負載和愉悅用戶的功效惑朦。
作用:
- 緩存期限:
APC的緩存分兩部分:**系統(tǒng)緩存**和**用戶數(shù)據(jù)緩存**。
系統(tǒng)緩存漓概,是自動使用的,是指APC把**PHP文件源碼的編譯結(jié)果緩存起來,然后在再次調(diào)用時先對比時間標記**。
用戶數(shù)據(jù)緩存病梢,由用戶在編寫php代碼時用apc_store和apc_fetch函數(shù)操作讀取胃珍、寫入的。如果量不大的話我建議可以使用一下蜓陌。如果量大觅彰,建議使用**memcache**緩存吧(最好別用,緩存頻繁的數(shù)據(jù)用戶會出現(xiàn)奇葩的錯誤)钮热。
-
狀態(tài)控制和分析: PHP APC的源碼包自帶了一個
apc.php
填抬。
可以將這個文件上傳到web服務器的某個目錄下,用瀏覽器訪問隧期,這會顯示當前的狀態(tài)飒责。我們可以從這里的表格分析當前的緩存狀況,作出進一步優(yōu)化(也就是圖形化NoSql數(shù)據(jù)查看而已)仆潮。
我們需要通過統(tǒng)計調(diào)整apc.shm_size宏蛉、apc.num_files_hints、apc.user_entries_hint的值性置,直到最佳拾并。
注意:在配置文件中默認apc.stat=1,這樣每次請求都會訪問需要使用的php文件鹏浅,看看這個文件是否更新了嗅义,已決定是否重新編譯php文件。這個是很耗性能的隐砸,直接賦值0將其關閉之碗。反正每次修改了配置文件后干掉php5-fpm,重新開啟即可季希。
php5-apcu 下載地址:https://github.com/krakjoe/apcu
2. Xdebug + kcachegrind 分析ThinkPHP框架函數(shù)調(diào)用圖
Xdebug 是什么我就不過多贅述了继控,windows下的安裝方式請自行百度械馆。
sudo apt-get install php5-xdebug
更改配置文件: vim /etc/php5/mods-available/xdebug.ini
zend_extension=xdebug.so # .so文件地址
xdebug.profiler_enable=on # 始終開啟
xdebug.trace_output_dir="/tmp/xdebug" # 文件保存地址
xdebug.profiler_output_dir="/tmp/xdebug" # 文件保存地址
隨后在/tmp
建立文件夾xdebug
并賦予相應的讀寫權(quán)限:
cd /tmp
mkdir xdebug
sudo chmod 777 xdebug
不給全部權(quán)限也可以,根據(jù)自己制定武通,讓后重啟php5-fpm 讓起其生效霹崎。
此時當我們打開瀏覽器運行我的網(wǎng)站時,隨便點擊點頁面冶忱,在xdebug
文件夾內(nèi)會產(chǎn)生類似文件:
-rw-r--r-- 1 nobody nobody 4615252 Oct 27 17:31 cachegrind.out.29293
此時我們來安裝kcachegrind尾菇,win下請安裝wincachegrind
sudo apt-get install kcachegrind
安裝完成后直接在終端下運行kcachegrind
啟動即可,并用其打開/tmp/xdebug
中的文件就可以進行性能分析了囚枪。
當然派诬,還能生成函數(shù)調(diào)用關系圖幫助你更好的分析:
對ThinkPHP感興趣的童鞋,這兩個在其手冊上明確寫的東西链沼,有多少人在去仔細看過呢默赂?都是對網(wǎng)站性能起很大優(yōu)化的。
ThinkPHP的查詢緩存 http://document.thinkphp.cn/manual_3_2.html#query_cache
ThinkPHP的SQL解析緩存 http://document.thinkphp.cn/manual_3_2.html#sql_build_cache
-
結(jié)束語:
好吧括勺,暫時就說這個多吧缆八,免得又說我要混助攻了.. 具體怎么通過kcachegrind,win下請安裝wincachegrind去分析呢疾捍,我現(xiàn)在也是在研究當中奈辰,只會看函數(shù)調(diào)用次數(shù)。(⊙o⊙)…好吧.. 我承認裝逼失敗...