PHP执行慢分析工具xdebug + webgrind
经常碰到用户PHP网站打开速度慢,运维环境配置的锅?PHP代码的锅?当你发现程序变慢,但有时我们不知道具体是哪块代码执行慢(排除环境问题),或者哪个方法占用了太长的执行时间,这时我们就需要一个调试工具,来帮我们记录程序执行过程中的一些具体信息,包括类、方法名、执行时间、次数等信息,今天介绍的工具是xdebug以及他的结果分析展示工具webgrind。
xdebug安装
cd /root/oneinstack/src
wget https://xdebug.org/files/xdebug-2.5.5.tgz
tar xzf xdebug-2.5.5.tgz
cd xdebug-2.5.5
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
php加载xdebug模块
cat > /usr/local/php/etc/php.d/ext-xdebug.ini << EOF
[xdebug]
zend_extension=xdebug.so
xdebug.trace_output_dir=/tmp/xdebug
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_enable = On
xdebug.profiler_enable_trigger = 1
EOF
创建xdebug目录
mkdir /tmp/xdebug
chown www.www /tmp/xdebug
webgrind安装
webgrind是php代码,依赖PHP环境, 将webgrind代码拷贝到你的apache或者nginx的web路径下,可以正常访问.
cd /data/wwwroot/www.example.com
git clone https://github.com/jokkedk/webgrind.git
chown -R www.www /data/wwwroot/www.example.com
vim /data/wwwroot/www.example.com/webgrind/config.php
static $storageDir = '/tmp/webgrind';
static $profilerDir = '/tmp/xdebug';
创建webgrind目录
mkdir /tmp/webgrind
chown www.www /tmp/webgrind
分析
然后运行你的php项目,这时xdebug会在/tmp/xdebug/下生成一个 cachegrind.out.* 的文件。在页面打开webgrind首页。
http://www.example.com/webgrind/index.php
Invocation Count:函数调用次数
Total Self Cost:函数本身花费的时间
Total Inclusive Cost:包含内部函数花费的时间
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于Yarn的Spark环境,统计哈姆雷特词频(1)
一、最流行的大数据框架Spark Yarn 环境搭建 Spark History Server 以及 Yarn MapReduce History Servcer Spark-submit 提交到Yarn 运行 二、Docker部署Hadoop Yarn 部署结果: 一台namenode节点,运行 namenode resourcemanager JobHistoryServer HistoryServer 2台datanode节点,运行 datanode nodemanager 主机Mac docker宿主机(virtualbox) Intellij idea spark client hdfs client 三、网络结构 mac 192.168.99.1 namenode 172.18.0.11 datanode1,datanode2 172.18.0.13 172.18.0.14 virtualbox 网桥 192.168.99.100 建立192.168.99.1 ~ 172.18.0.0 路由 sudo route -n add 172.18.0.0/24 192.168.9...
- 下一篇
JavaScript Scoping & Hoisting
var a = 1; function foo() { if (!a) { var a = 2; } alert(a); }; foo(); 上面这段代码在运行时会产生什么结果? 尽管对于有经验的程序员来说这只是小菜一碟,不过我还是顺着初学者常见的思路做一番描述: 创建了全局变量a,定义其值为1 创建了函数foo 在foo的函数体内,if语句将不会执行,因为!a会将变量a转变成布尔的假值,也就是false 跳过条件分支,alert变量a,最终的结果应该是输出1 嗯,看起来无懈可击的推理啊,但让人惊讶的是:答案竟然是2!为什么? 别着急,我会解释给你听。首先我要告诉你这不是什么错误,而是 JavaScript 语言解释器的一个(非官方的)特性,某人(Ben Cherry)把这个特性叫做:Hoisting(目前尚未有标准的翻译,比较常见的是提升)。 声明与定义 为了理解 Hoisting,我们先来看一个简单的情况: var a = 1; 你是否想过,上面这句代码在运行的时候到底发生了什么? 你是否知道,就这句代码而言,“声明变量a” 和 “定义变量a”这两个说法哪一个才是正确的? 下例叫做...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品