程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 使用xdebug分析thinkphp框架函數調用圖

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

編輯:關於PHP編程

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


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

 

關於xdebug的安裝參考這2篇

NetBeans配置Xdebug 遠程調試PHP

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

 

1.安裝xdebug

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

# http://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.aspphp.online/bianchen/UploadFiles_4619/201701/2017011617435949.jpg

 

data-cke-saved-src=https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011617440030.jpg

 

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

data-cke-saved-src=https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011617440121.jpg

 

 

 

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

data-cke-saved-src=https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011617440142.jpg

 

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

data-cke-saved-src=https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017011617440282.jpg

 

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

查詢緩存功能支持所有的數據庫,並且支持所有的緩存方式和有效期。

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


SQL解析緩存
http://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 應用程序以查找、診斷和加速運行緩慢的代碼

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved