在第三方虚拟服务器上检查客户端的应用程序时,我注意到一个有趣的现象:单个 PHP 进程似乎使用多个内核。据我所知,PHP 做不到。
行为描述
以下是处理对 Web 应用程序的单个请求时 htop 的输出: htop 的
输出,绿色为用户 cpu,红色为系统 cpu
所有四个内核都在 100%,只有一个 PHP 进程在 396% CPU 和内存使用率低。
我已经使用 strace 或 pidstat 调查了高系统 cpu,但找不到任何 IO 问题。
服务器信息
虚拟服务器是一个 Debain LAMP 环境,使用 Intel 的 VT-X 虚拟化和 Virtuozzo,提供 4 个 560 MHz 的内核:
lscpu
的输出 服务器在 apache 2.4.7 (prefork) 提供的快速 CGI 中运行 PHP 5.5.9。Nginx 1.9.4 作为反向代理,Plesk 12.5 用于配置服务器。
示例 PHP 代码(编辑)
为了排除应用程序代码作为源,我使用一段简单的代码确认了该行为:
$array = array('z', 'y', 'x', 'h', 'd', 's', 'w', 'q', 'a');
for ($i=0; $i < 9999999; $i++) {
sort($array); // Delaying execution
}
echo 'loop ended';
两个或多个 PHP 进程(编辑) 如果同时处理两个或多个请求,每个进程在尽可能多的核心上运行(2 个进程 => 每个 2 个核心,3 个进程 => 每个 1.33 个核心)。
问题
- PHP 是否可以同时使用多个内核?
- 这可能与虚拟化有关吗?
- 追问:系统cpu使用率占主导地位的原因可能是什么?