PHP如何使用超过100%的CPU?

时间:2016-01-24 12:13:00

标签: php virtualization virtuozzo

在第三方虚拟服务器上检查客户端的应用程序我发现了一个有趣的现象: 单个PHP进程似乎使用多个核心。据我所知,PHP无法做到这一点。

行为描述
这是处理对Web应用程序的单个请求时htop的输出: Output of htop
htop的输出,绿色是用户cpu,红色是系统cpu

所有四个核心都是100%,只有一个PHP进程,CPU占396%,内存使用率很低。
我已经使用strace或pidstat调查了高系统cpu,但无法找到任何IO问题。

服务器信息
虚拟服务器是Debain LAMP环境,采用英特尔的VT-X虚拟化,Virtuozzo提供4个560 MHz核心:

Output of 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使用率占主导地位的原因是什么?

1 个答案:

答案 0 :(得分:0)

  • PHP可以同时使用多个核心吗?

是的,它被称为pthreads。它旨在用PHP实现真正的多线程。

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

不太可能。我想和Will说的一样,这可能是由php推出的一个子流程。

  • 后续行动:系统CPU使用率占主导地位的原因是什么?

它与应用程序完全相关。但是php推出的任何多核任务都可以显示出来。一个用于栅格化svg图像的例子的java应用程序。