使用xdebug分析thinkphp框架函數調用圖

開發中需要性能調優,使用xdebug分析thinkphp框架函數調用圖。

 

關於xdebug的安裝參考這2篇

NetBeans配置Xdebug 遠程調試PHP

php擴展xdebug安裝以及用kcachegrind系統分析

 

1.安裝xdebug

需要先去https://www.xdebug.org看看一些文檔,xdebug作為php擴展安裝

# https://www.xdebug.org/files/xdebug-2.3.3.tgz

# tar -xzf xdebug-2.3.3.tgz
# cd xdebug-2.3.3
# /usr/local/php/bin/phpize
# ./configure –enable-xdebug –with-php-config=/usr/local/php/bin/php-config
# make && make install

 

2.給權限

# mkdir -p /tmp/xdebug
# chmod 755 /tmp/xdebug

# chown nobody:nobody /tmp/xdebug

 

3.修改php配置

修改php.ini文件

[Xdebug]
zend_extension=xdebug.so
xdebug.profiler_enable=on
xdebug.trace_output_dir=/tmp/xdebug
xdebug.profiler_output_dir=/tmp/xdebug

 

4.重啟php-fpm

# killall php-fpm

# /etc/init.d/php-fpm

 

5.運行PHP產生日志

配置好之後,運行php文件就會在/tmp/xdebug下生成類似這樣的日志文件

-rw-r–r– 1 nobody nobody 4615252 Oct 27 17:31 cachegrind.out.29293

 

6.使用kcachegrind圖形化分析日志

windows port of kcachegrind

 

 

data-cke-saved-src=https://www.2cto.com/uploadfile/Collfiles/20151028/2015102808335264.jpg

 

data-cke-saved-src=https://www.2cto.com/uploadfile/Collfiles/20151028/2015102808335365.jpg

 

每一步函數調用看的很清晰:

data-cke-saved-src=https://www.2cto.com/uploadfile/Collfiles/20151028/2015102808335366.jpg

 

 

 

問題最嚴重就是出在execute,其實也就是大量的SQl查詢。called就是函數調用次數。

data-cke-saved-src=https://www.2cto.com/uploadfile/Collfiles/20151028/2015102808335367.jpg

 

優化辦法很多,使用memcached或者直接使用thinkphp自帶的各自緩存,這個是優化後的圖,明顯看出called少瞭。

data-cke-saved-src=https://www.2cto.com/uploadfile/Collfiles/20151028/2015102808335368.jpg

 

查詢緩存
https://document.thinkphp.cn/manual_3_2.html#query_cache
對於及時性要求不高的數據查詢,我們可以使用查詢緩存功能來提高性能,而且無需自己使用緩存方法進行緩存和獲取。

查詢緩存功能支持所有的伺服器,並且支持所有的緩存方式和有效期。

在使用查詢緩存的時候,隻需要調用Model類的cache方法,例如:
1.$Model->cache(true)->where('status=1')->select();

SQL解析緩存
https://document.thinkphp.cn/manual_3_2.html#sql_build_cache
除瞭查詢緩存之外,ThinkPHP還支持SQL解析緩存,因為ThinkPHP的ORM機制,所有的SQL都是動態生成的,然後由伺服器驅動執行。

所以如果你的應用有大量的SQL查詢需求,那麼可以開啟SQL解析緩存以減少SQL解析提高性能。要開啟SQL解析緩存,隻需要設置:
1.'DB_SQL_BUILD_CACHE' => true,
即可開啟伺服器查詢的SQL創建緩存,默認緩存方式為文件方式,還可以支持xcache和apc方式緩存,隻需要設置:
1.'DB_SQL_BUILD_QUEUE' => 'xcache',
我們知道,一個項目的查詢SQL的量可能會非常巨大,所以有必要設置下緩存的隊列長度,例如,我們希望SQL解析緩存不超過20條記錄,可以設置:
1.'DB_SQL_BUILD_LENGTH' => 20, // SQL緩存的隊列長度。

 

How profilers lie: the cases of gprof and KCachegrind

 

為 PHP 應用提速、提速、再提速!,第 2 部分: 分析 PHP 應用程式以查找、診斷和加速運行緩慢的代碼

 

 

 

 

 

發佈留言