PHP和MySQL:找出导致大量CPU负载的文件或查询

时间:2012-07-20 03:23:42

标签: php mysql apache

这是我的最高输出:

  

6747 example.com 15 0 241m 19m 8188 R 29.9 [CPU] 0.2 [RAM] 3:24.89 php

     

31798 mysql 15 0 1952m 422m 5384 S 12.0 [CPU] 5.3 [RAM] 9:00.27 mysqld

查看PHP的CPU使用情况。我不知道哪个文件导致此负载。是否有任何模块用于显示哪个文件在树下使用CPU?我的意思是这样的:

  

6747 example.com 15 0 241m 19m 8188 R 29.9 [CPU] 0.2 [RAM] 3:24.89 php

                     5.49%                          index.php
                    15.39%                         videos.php
                        x%                              y.php
     

31798 mysql 15 0 1952m 422m 5384 S 12.0 [CPU] 5.3 [RAM] 9:00.27 mysqld

我也想和mysql一样。我现在想要执行哪个查询以及需要多长时间。

3 个答案:

答案 0 :(得分:3)

最简单的选择(不是说最准确,但最简单)将是:

  • 对于PHP,如果要将一个PHP文件与另一个PHP文件进行比较,假设花费时间最长的进程使用的是大多数CPU。使用网络探查器(内置于Chrome和IE或Firebug中)来查找哪个过程耗时最长。失败了,用户提琴手(在Windows上)或查尔斯(Mac)。删除数据响应时间并平均剩余=时间以生成响应约= CPU使用率。请注意,这将包括外部调用,memcached调用,mySQL调用等。

  • 对于mySQL,慢查询日志非常宝贵。 (需要在my.cnf中配置并重新启动服务器 - 但它应该被认为是强制性的。)

  • 对于更多诊断,Xdebug(由Xesued建议)将帮助您分析脚本的各个部分(以及调试)。但不建议用于生产,因为它会进一步降低你的速度。

  • 另一种粗暴的方式是“回声微缩(真实);”在脚本中的各个位置,或将该信息泵入日志文件。 (在脚本开始时打开日志文件,并在各个点记录microtime - 查找大间隙。)

答案 1 :(得分:1)

我不知道如何在运行时确定PHP脚本加载。 (不确定它是否可行)。但是,使用Xdebug的分析器可以帮助您确定脚本的缓慢位置。

Xdebug Profiler

它是一个很好的工具,可以帮助你捕捉90%以上的减速。

至于MySQL:这是一个相关的问题:how-to-analyze-query-cpu-time

答案 2 :(得分:0)

我认为没有直接可用的东西,但假设这些脚本中的每一个都是单独运行的(如在CLI上单独调用的那样),您可以使用getmypid()然后将其与CPU负载相关联日志中。