XDebug分析php代码性能
XDebug是一個(gè)開(kāi)放源代碼的PHP程序調(diào)試器(即一個(gè)Debug工具),可以用來(lái)跟蹤,調(diào)試和分析PHP程序的運(yùn)行狀況。是一個(gè)C語(yǔ)言擴(kuò)展包(Windows下擴(kuò)展名為.dll)。?
XDebug 下載地址:
http://xdebug.org/download.php
WinCacheGrind 下載地址:
http://sourceforge.net/projects/wincachegrind/
1. 下載?
以Windows環(huán)境下php5.2為例。去官方下載合適的XDebug版本,看下圖,應(yīng)該在前兩個(gè)鏈接選擇一個(gè)下載,這要取決于你的PHP5.2是否為非線程安全還是線程安全版,我這里是后者,因此選擇紅框標(biāo)定的鏈接下載?
?
下載后是一個(gè)dll文件,建議修改為更友好的文件名:php_xdebug.dll.?
2. 配置?
復(fù)制php_xdebug.dll到$php_installed_dir/ext目錄下,修改php.ini,可以先設(shè)置如下選項(xiàng):?
注:output_dir需要手工事先建好,否則不會(huì)生成profiler數(shù)據(jù)到該目錄。?
3. 測(cè)試安裝成功?
重新啟動(dòng)apache, 運(yùn)行<?php phpinfo()?>,看到如下選項(xiàng)表明安裝成功?
?
4. 開(kāi)始調(diào)試?
1). Test Case1?
運(yùn)行結(jié)果?
xdebug的輸出文件格式(cachegrind.out)?
xdebug的輸出文件格式(cachegrind.out)
xdebug的性能測(cè)試輸出文件名是可以配置的。
默認(rèn)是 xdebug.profiler_output_name = cachegrind.out.%p
那個(gè)%p是服務(wù)器的pid,會(huì)輸出“cachegrind.out.1408”之類(lèi)的文件。
可能這樣不太方便測(cè)試很多文件的網(wǎng)站。另外對(duì)于單一入口的文件名都是一樣的.
網(wǎng)上看到的中文文章里面都沒(méi)有關(guān)于這個(gè)參數(shù)的說(shuō)明。
?
?
| %c | 當(dāng)前工作目錄的crc32校驗(yàn)值 | trace.%c | trace.1258863198.xt |
| %p | 當(dāng)前服務(wù)器進(jìn)程的pid | trace.%p | trace.5174.xt |
| %r | 隨機(jī)數(shù) | trace.%r | trace.072db0.xt |
| %s | 腳本文件名(注) | cachegrind.out.%s | cachegrind.out._home_httpd_html_test_xdebug_test_php |
| %t | Unix時(shí)間戳(秒) | trace.%t | trace.1179434742.xt |
| %u | Unix時(shí)間戳(微秒) | trace.%u | trace.1179434749_642382.xt |
| %H | $_SERVER['HTTP_HOST'] | trace.%H | trace.kossu.xt |
| %R | $_SERVER['REQUEST_URI'] | trace.%R | trace._test_xdebug_test_php_var=1_var2=2.xt |
| %S | session_id (來(lái)自$_COOKIE 如果設(shè)置了的話) | trace.%S | trace.c70c1ec2375af58f74b390bbdd2a679d.xt |
| %% | %字符 | trace.%% | trace.%.xt |
| 注 此項(xiàng)不適用于trace file的文件名 | |||
從上表可以找到一些適合你的參數(shù)。
比如,我想針對(duì)每個(gè)文件生成一個(gè)輸出文件。
那么我可以用:
xdebug.profiler_output_name = cachegrind.out.%s
多個(gè)域名的話,也可以組合使用
xdebug.profiler_output_name = cachegrind.out.%H.%u.%s
=============================================================
?
使用Xdebug調(diào)試和優(yōu)化PHP程序系列教程之Xdebug配置,根據(jù)Xdebug的官方文檔來(lái)詳細(xì)解釋Xdebug的參數(shù)配置。
Xdebug配置
第一部分:安裝
預(yù)編譯模塊
安裝預(yù)編譯模塊是很容易的。只需要將它們放到一個(gè)目錄中,并將下面的內(nèi)容添加到php.ini中:(不要忘記更改路徑和文件名為你自己的值,并確信你使用的是完整路)
zend_extension_ts = “c:/php/modules/php_xdebug.dll”
第二部分:基本特征:
相關(guān)參數(shù)設(shè)置
xdebug.default_enable
類(lèi)型:布爾型 默認(rèn)值:On
如果這項(xiàng)設(shè)置為On,堆棧跟蹤將被默認(rèn)的顯示在錯(cuò)誤事件中。你可以通過(guò)在代碼中使用xdebug_disable()來(lái)禁止堆疊跟蹤的顯示。因?yàn)檫@是xdebug基本功能之一,將這項(xiàng)參數(shù)設(shè)置為On是比較明智的。
xdebug.max_nesting_level
類(lèi)型:整型 默認(rèn)值:100
The value of this setting is the maximum level of nested functions that are allowed before the script will be aborted.
限制無(wú)限遞歸的訪問(wèn)深度。這項(xiàng)參數(shù)設(shè)置的值是腳本失敗前所允許的嵌套程序的最大訪問(wèn)深度。
第三部分:堆棧跟蹤:
相關(guān)參數(shù)設(shè)置
xdebug.dump_globals
類(lèi)型:布爾型 默認(rèn)值:1
限制是否顯示被xdebug.dump.*設(shè)置定義的超全局變量的值
例 如,xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT 將打印 PHP 超全局變量 $_SERVER['REQUEST_METHOD']、$_SERVER['REQUEST_URI'] 和 $_SERVER['HTTP_USER_AGENT']。
xdebug.dump_once
類(lèi)型:布爾型 默認(rèn)值:1
限制是否超全局變量的值應(yīng)該轉(zhuǎn)儲(chǔ)在所有出錯(cuò)環(huán)境(設(shè)置為Off時(shí))或僅僅在開(kāi)始的地方(設(shè)置為On時(shí))
xdebug.dump_undefined
類(lèi)型:布爾型 默認(rèn)值:0
如果你想從超全局變量中轉(zhuǎn)儲(chǔ)未定義的值,你應(yīng)該把這個(gè)參數(shù)設(shè)置成On,否則就設(shè)置成Off
xdebug.show_exception_trace
類(lèi)型:整型 默認(rèn)值:0
當(dāng)這個(gè)參數(shù)被設(shè)置為1時(shí),即使捕捉到異常,xdebug仍將強(qiáng)制執(zhí)行異常跟蹤當(dāng)一個(gè)異常出現(xiàn)時(shí)。
xdebug.show_local_vars
類(lèi)型:整型 默認(rèn)值:0
當(dāng)這個(gè)參數(shù)被設(shè)置為不等于0時(shí),xdebug在錯(cuò)環(huán)境中所產(chǎn)生的堆棧轉(zhuǎn)儲(chǔ)還將顯示所有局部變量,包括尚未初始化的變量在最上面。要注意的是這將產(chǎn)生大量的信息,也因此默認(rèn)情況下是關(guān)閉的。
第四部分:分析PHP腳本
相關(guān)參數(shù)設(shè)置
xdebug.profiler_append
類(lèi)型:整型 默認(rèn)值:0
當(dāng)這個(gè)參數(shù)被設(shè)置為1時(shí),文件將不會(huì)被追加當(dāng)一個(gè)新的需求到一個(gè)相同的文件時(shí)(依靠xdebug.profiler_output_name的設(shè)置)。相反的設(shè)置的話,文件將被附加成一個(gè)新文件。
xdebug.profiler_enable
類(lèi)型:整型 默認(rèn)值:0
開(kāi)放xdebug文件的權(quán)限,就是在文件輸出目錄中創(chuàng)建文件。那些文件可以通過(guò)KCacheGrind來(lái)閱讀來(lái)展現(xiàn)你的數(shù)據(jù)。這個(gè)設(shè)置不能通過(guò)在你的腳本中調(diào)用ini_set()來(lái)設(shè)置。
xdebug.profiler_output_dir
類(lèi)型:字符串 默認(rèn)值:/tmp
這個(gè)文件是profiler文件輸出寫(xiě)入的,確信PHP用戶對(duì)這個(gè)目錄有寫(xiě)入的權(quán)限。這個(gè)設(shè)置不能通過(guò)在你的腳本中調(diào)用ini_set()來(lái)設(shè)置。
xdebug.profiler_output_name
類(lèi)型:字符串 默認(rèn)值:cachegrind.out%p
這個(gè)設(shè)置決定了轉(zhuǎn)儲(chǔ)跟蹤寫(xiě)入的文件的名稱。
第五部分:遠(yuǎn)程Debug
相關(guān)參數(shù)設(shè)置
xdebug.remote_autostart
類(lèi)型:布爾型 默認(rèn)值:0
一般來(lái)說(shuō),你需要使用明確的HTTP GET/POST變量來(lái)開(kāi)啟遠(yuǎn)程debug。而當(dāng)這個(gè)參數(shù)設(shè)置為On,xdebug將經(jīng)常試圖去開(kāi)啟一個(gè)遠(yuǎn)程debug session并試圖去連接客戶端,即使GET/POST/COOKIE變量不是當(dāng)前的。
xdebug.remote_enable
類(lèi)型:布爾型 默認(rèn)值:0
這個(gè)開(kāi)關(guān)控制xdebug是否應(yīng)該試著去連接一個(gè)按照xdebug.remote_host和xdebug.remote_port來(lái)設(shè)置監(jiān)聽(tīng)主機(jī)和端口的debug客戶端。
xdebug.remote_host
類(lèi)型:字符串 默認(rèn)值:localhost
選擇debug客戶端正在運(yùn)行的主機(jī),你不僅可以使用主機(jī)名還可以使用IP地址
xdebug.remote_port
類(lèi)型:整型 默認(rèn)值:9000
這個(gè)端口是xdebug試著去連接遠(yuǎn)程主機(jī)的。9000是一般客戶端和被綁定的debug客戶端默認(rèn)的端口。許多客戶端都使用這個(gè)端口數(shù)字,最好不要去修改這個(gè)設(shè)置。
注意:所有以上參數(shù)修改后,要重啟Apache才能生效!
=======================================================
轉(zhuǎn)載于:https://www.cnblogs.com/gaoqin31/p/5889805.html
總結(jié)
以上是生活随笔為你收集整理的XDebug分析php代码性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Bootstrap入门(二十一)组件15
- 下一篇: iOS开发之图片分辨率与像素对齐