8

在第三方虚拟服务器上检查客户端的应用程序时,我注意到一个有趣的现象:单个 PHP 进程似乎使用多个内核。据我所知,PHP 做不到。

行为描述
以下是处理对 Web 应用程序的单个请求时 htop 的输出: htop 的 输出,绿色为用户 cpu,红色为系统 cpu 所有四个内核都在 100%,只有一个 PHP 进程在 396% CPU 和内存使用率低。 我已经使用 strace 或 pidstat 调查了高系统 cpu,但找不到任何 IO 问题。htop 的输出



服务器信息
虚拟服务器是一个 Debain LAMP 环境,使用 Intel 的 VT-X 虚拟化和 Virtuozzo,提供 4 个 560 MHz 的内核:

lscpu 的输出
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使用率占主导地位的原因可能是什么?
4

1 回答 1

0
  • PHP 是否可以同时使用多个内核?

是的,它被称为 pthreads。它旨在在 PHP 中执行真正的多线程。

  • 这可能与虚拟化有关吗?

不太可能。我想和Will说的一样,可能是php发起的一个子进程。

  • 追问:系统cpu使用率占主导地位的原因可能是什么?

它完全依赖于应用程序。但是任何由 php 启动的多核任务都可能出现这样的情况。例如,一个用于栅格化 svg 图像桶的 Java 应用程序。

于 2016-01-24T12:40:28.387 回答