我有一台 16 CPU 核心的服务器,平均负载持续在 40-70 之间。经过top
几个小时的命令测试,我发现 CPU 峰值只与单个用户有关。
按下命令后c
,top
高 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*
否则我也会在这里检查。
希望这能让你了解该用户的活动