PvB*_*PvB 8 php virtualization virtuozzo
在第三方虚拟服务器上检查客户端的应用程序时,我注意到一个有趣的现象:单个PHP进程似乎使用多个核心.据我所知,PHP无法做到这一点.
行为描述
以下是处理对Web应用程序的单个请求时htop的输出:
htop的输出,绿色是用户cpu,红色是系统cpu
所有四个核心都是100%,只有一个PHP进程在396%CPU和内存使用率低.
我已经使用strace或pidstat调查了高系统cpu,但是找不到任何IO问题.
服务器信息
虚拟服务器是Debain LAMP环境,使用英特尔的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代码(EDIT)
为了排除应用程序代码作为源我使用一段简单的代码确认了行为:
$array = array('z', 'y', 'x', 'h', 'd', 's', 'w', 'q', 'a');
for ($i=0; $i < 9999999; $i++) {
sort($array); // Delaying execution
}
echo 'loop ended';
Run Code Online (Sandbox Code Playgroud)
两个或多个PHP进程(EDIT) 如果同时处理两个或多个请求,则每个进程在尽可能多的内核上运行(2个进程=>每个进程2个内核,3个进程=> 1.33个内核).
问题
是的,它称为 pthread。它旨在在 PHP 中实现真正的多线程。
不太可能。我想就像Will所说的一样,这可能是php启动的一个子进程。
它与应用程序完全相关。但是 php 启动的任何多核任务都可能会这样显示。例如,用于光栅化一桶 svg 图像的 Java 应用程序。