首页 > 编程 > PHP > 正文

使用xdebug分析thinkphp框架函数调用图

2020-03-22 17:11:51
字体:
来源:转载
供稿:网友
  • 开发中需要性能调优,使用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

    下载地址:http://sourceforge.net/projects/precompiledbin/?source=typ_redirect

    每一步函数调用看的很清晰:

    问题最严重就是出在execute,其实也就是大量的SQl查询。called就是函数调用次数。

    优化办法很多,使用memcached或者直接使用thinkphp自带的各自缓存,这个是优化后的图,明显看出called少了。

    查询缓存
    http://document.thinkVeVb.com/manual_3_2.html#query_cache
    对于及时性要求不高的数据查询,我们可以使用查询缓存功能来提高性能,而且无需自己使用缓存方法进行缓存和获取。

    查询缓存功能支持所有的数据库,并且支持所有的缓存方式和有效期。

    在使用查询缓存的时候,只需要调用Model类的cache方法,例如:
    1.$Model->cache(true)->where('status=1')->select();


    SQL解析缓存
    http://document.thinkVeVb.com/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 应用程序以查找、诊断和加速运行缓慢的代码

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表