隔离一个高CPU的PHP进程

我有一个16 CPU的核心服务器,经历40-70的一致负载平均值。 在几个小时的top命令露营之后,我已经隔离了单个用户的CPU峰值。

top命令按c后,高CPU命令是/usr/bin/php /home/user/public_html/index.php ,这对于隔离是基本没用的,因为这是我们整个PHP MVC框架的主控制器处理程序(CodeIgniter,如果你好奇)。

我之所以还没有使用代码分析器,是因为这个用户下的任何PHP进程看起来一直都是高CPU占用率。 我已经仔细检查了我们的slow-query.log(MySQL),并且这个Web应用程序生成了接近于0的慢速查询。

问题:

  • 代码分析是这个应用程序的主要答案?
  • 为什么传入的PHP请求只有一个用户一直很高?
  • 为什么这个Web应用程序的任何和所有传入的PHP请求是高CPU使用率?
  • 可能是一个超载或效率低下的MySQL数据库导致这些PHP进程消耗高于正常的CPU使用率? 还是两个完全独立?
  • 硬件升级的时间? 你怎么知道这个区别?

可能是一个超载或效率低下的MySQL数据库导致这些PHP进程消耗高于正常的CPU使用率? 还是两个完全独立?

PHP和MySQL是不同的进程,所以当一个缓慢的MySQL查询运行,并且你跟在最上面时,你肯定会看到MySQL开始加载CPU。

为什么传入的PHP请求只有一个用户一直很高?

要尝试隔离活动是这个特定的用户,我会尝试查看该用户正在访问的路由(并因此在codeigniter中触发控制器操作)。

你没有指定操作系统,但假设你的应用程序运行在apache + mod_php上,所以你应该看到GET / POST请求/路由被访问在/var/log/apache2/access.log.*/var/log/httpd/access*_log* 。 我假设你已经检查了/var/log/apache2/error.log.*/var/log/httpd/error*_log*否则我也会在这里检查。

希望这可以提供一些洞察这个用户的活动