windows配置xhprof,PHP性能分析工具

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本来以为配置这么一个工具不会费很大的力气,后面发现完全不是。

本来以为配置这么一个工具不会费很大的力气,后面发现完全不是。


一、小插曲


  早上显示电脑不能显示虚拟目录下的所有域名,但是能打开localhost,数据库连接也不行了。这个问题纠缠了我一个上午。对了还有个问题是输入法不能显示了,后面下载了个百度卫士修复了下,早上真是诸事不顺。

1)一开始以为是firefox浏览器Fiddler插件的问题,然后关闭firefox中的插件,关闭Fiddler,发现还是不能打开网站。


  image.png

 


2)以为是浏览器的问题,马上打开另外几个浏览器,在chrome浏览器中打开,依旧不能打开,显示下面的错误,IE中也不行,这就奇怪了。然后根据错误代码在百度和google上面搜索,没查到什么有用的。


  image.png

 


3)后面经同事提醒可以看看apache的日志,看看有没有蛛丝马迹。但奇怪的是log都没有发生变化。


  image.png

 


4)打开防火墙,发现已经全部都关闭,后面打开windows日志,也没发现有啥问题。


  image.png


 

5)最后,再分析了下问题,发现其实是不能访问127.0.0.1这个域名导致的。然后再搜索找到一条指令,试一下,还真行了。


  image.png

 


6)一个莫名奇妙的问题出现在面前,做的第一件事情就是打开搜索引擎,然后描述问题;不过很多时候,一开始描述的并不是问题的核心所在,只能在不断尝试的时候,把问题分析的越来越清晰。

  下午安装xhprof也是一个差不多的分析问题的过程,我的php版本是5.5.17的。

 

二、windows环境


1)首先就是下载xhprof扩展包,搜索关键字“xhprof”,马上就找到了php官网上的下载链接,然并卵,这个linux环境的。


image.png

 

2)马上搜索起来,还是顺利的找到了,而且版本还有多种,windows xhprof,朴素的页面我喜欢。


image.png

 

三、php.ini


1)把下载到的php_xhprof.dll,放到php的ext目录下面。然后打开扩展


image.png

 

2)最后配置日志文件


image.png

 

3)在phpinfo中查看是否出现了这个扩展,很好,已经出现了。


image.png

 

四、demo


1)在github上面下载到了xhprof的php相关代码事例。目录结构如下,等一下会用到的是examples,xhprof_html与xhprof_lib。


image.png


 

2)现在examples文件夹中打开example.php文件,出现了下面的一串信息。

image.png

 

3)然后打开xhprof_html,出现了下面的几个日志,这个日志存放在php.ini设置的xhprof.output_dir目录中。


image.png

 

4)点击某个日志,出现了下面的表格,里面代表的内容可以在网上查到。


image.png

 


5)点击view full callgraph,这个其实是我最想看到的效果,满心期待的,可是出现了一个无情的错误,囧。


  image.png

 


6)在网上搜索到一篇文章,里面讲到是因为没有安装Graphviz,这个软件导致的,马上就去下载。


  image.png

 


7)以为下下来就可以了,万万没想到,一如既往的报错。在那篇文章中说到给config.php文件配置个目录,我在事例代码中看了半天都没找到这个文件,以为在忽悠我,后来我在那篇博客中下载了demo代码,果然发现了这个文件,不过即使把这个文件放到我这边,也没啥鸟用。又开始搜索,搜到篇洋人写的文章,也提到了配置。


  image.png

 


8)最后在Stack Overflow这个网站上面发现了灵感,这个网站还真是有用。有个洋人说道:

  image.png

 

9)还有这么个文件,马上找到这个函数xhprof_generate_image_by_dot


$descriptorspec = array(
       // stdin is a pipe that the child will read from
       0 => array("pipe", "r"),
       // stdout is a pipe that the child will write to
       1 => array("pipe", "w"),
       // stderr is a pipe that the child will write to
       2 => array("pipe", "w")
       );
  $cmd = " dot -T".$type;
  $process = proc_open( $cmd, $descriptorspec, $pipes, sys_get_temp_dir(), array( 'PATH' => getenv( 'PATH' ) ) );


10)发现读取了PATH这个环境变量,原来是要配置下这个环境变量的,我当时其实是配置过一次的,不过不是配的系统变量,囧,将Graphviz2.38\bin的绝对路径写上去。


image.png

 


11)期待已久的图片终于出现了。


image.png


 

如果想要应用到实际项目中,肯定还有很多地方需要修改。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
28天前
|
缓存 监控 网络协议
在配置 PHP-FPM 的 pool 时,常见的性能优化技巧
在配置 PHP-FPM 的 pool 时,常见的性能优化技巧
|
4月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
20天前
|
关系型数据库 MySQL PHP
php wampserver的使用配置
本文介绍了WampServer在Windows系统下的配置和使用方法,包括如何修改PHP时区为中国标准时区PRC、更改Apache服务器端口号以避免冲突、设置起始页以及如何创建和管理虚拟目录。通过这些步骤,用户可以更有效地在本地环境中开发和测试PHP程序。
php wampserver的使用配置
|
20天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入探索与实践在软件开发的广袤天地中,PHP以其独特的魅力和强大的功能,成为无数开发者手中的得力工具。而在这条充满挑战与机遇的征途上,设计模式犹如一盏明灯,指引着我们穿越代码的迷雾,编写出更加高效、灵活且易于维护的程序。今天,就让我们聚焦于设计模式中的璀璨明珠——策略模式,深入探讨其在PHP中的实现方法及其实际应用价值。
策略模式,这一设计模式的核心在于它为软件设计带来了一种全新的视角和方法。它允许我们在运行时根据不同情况选择最适合的解决方案,从而极大地提高了程序的灵活性和可扩展性。在PHP这门广泛应用的编程语言中,策略模式同样大放异彩,为开发者们提供了丰富的创作空间。本文将从策略模式的基本概念入手,逐步深入到PHP中的实现细节,并通过一个具体的实例来展示其在实际项目中的应用效果。我们还将探讨策略模式的优势以及在实际应用中可能遇到的挑战和解决方案,为PHP开发者提供一份宝贵的参考。
|
23天前
|
Unix PHP
PHP-FPM 配置
PHP-FPM 配置
|
23天前
|
IDE 安全 网络安全
Xdebug 在不同版本的 PHP 中配置方法有什么不同?
Xdebug 在不同版本的 PHP 中配置方法有什么不同?
102 4
|
27天前
|
监控 IDE PHP
php xdebug的配置、调试、跟踪、调优、分析
php xdebug的配置、调试、跟踪、调优、分析
|
10天前
|
缓存 NoSQL 数据处理
原生php实现redis缓存配置和使用方法
通过上述步骤,你可以在PHP项目中配置并使用Redis作为高性能的缓存解决方案。合理利用Redis的各种数据结构和特性,可以有效提升应用的响应速度和数据处理效率。记得在实际应用中根据具体需求选择合适的缓存策略,如设置合理的过期时间,以避免内存过度消耗。
18 0
|
2月前
|
PHP 开发者 UED
PHP中的异常处理:从基础到高级探索Python中的列表推导式:简洁而强大的工具
【8月更文挑战第30天】在PHP编程的世界中,异常处理是确保代码健壮性和可靠性的关键机制。本文将引导您了解PHP异常处理的基本概念,并通过实际示例展示如何有效地捕获和处理异常。我们将一起探索try-catch结构、自定义异常类以及高级异常处理技术,让您的PHP代码更加稳固和易于维护。