隔离高 CPU 占用的 PHP 进程

隔离高 CPU 占用的 PHP 进程

我有一台 16 CPU 核心的服务器,平均负载持续在 40-70 之间。经过top几个小时的命令测试,我发现 CPU 峰值只与单个用户有关。

按下命令后ctop高 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 使用率?还是两者完全独立?
  • 是时候升级硬件了吗?你怎么知道有什么不同?

答案1

过载或低效的 MySQL 数据库是否会导致这些 PHP 进程消耗高于正常的 CPU 使用率?还是两者完全独立?

PHP 和 MySQL 是不同的进程,因此当运行缓慢的 MySQL 查询时,如果您使用 top 进行跟踪,您肯定会看到 MySQL 开始加载 CPU。

为什么对于只有一个用户来说,传入的 PHP 请求会持续很高?

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

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

希望这能让你了解该用户的活动

相关内容