在第三方虚拟服务器上检查客户端的应用程序我注意到一个有趣的现象: 单个PHP进程似乎使用多个核心。据我所知,PHP无法做到这一点。PHP如何使用超过100%的CPU?
行为描述
这里的HTOP处理一个请求的Web应用程序时的输出:
HTOP的输出,绿色福利用户的CPU和红色表示系统CPU
所有四核处于100%,只有一个PHP进程在396%的CPU和内存使用率很低。
我已经使用strace或pidstat调查了高系统cpu,但找不到任何IO问题。
服务器信息
虚拟服务器是使用Intel的VT-X虚拟化和Virtuozzo的在560兆赫提供4个内核一个的Debain LAMP环境:
lscpu的输出
该服务器在Apache 2.4.7(prefork)服务的快速CGI中运行PHP 5.5.9。 Nginx 1.9.4作为reverese代理,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使用率占优势的原因是什么?
这肯定是由PHP内部运行的代码引起的。它运行的是什么? – Will
感谢您的意见,Will。 我已经用一个简单的for循环测试了行为,并且可以确认它。我在这个问题中加入了测试用例。 – PvB
啊,明白了!谢谢。老实说,如果我们排除了代码,我们可能需要将它迁移到ServerFault,因为它可能会在那里获得正确的眼睛。据我所知,一个PHP FastCGI worker不能使用多个内核。但是,理论上,Linux调度程序可以在CPU之间切换进程。嗯... – Will