我们正在使用Docker进行PHP开发,我对在主机上运行PHP 7.4与在Docker容器中运行代码的性能差异很感兴趣。
我运行的是最新的Linux Mint
版本,docker版本是Docker version 20.10.17
-没有特殊的非标准配置。
为了公平地比较两个PHP环境,我仔细检查了配置,当然也禁用了xdebug。
然后我运行一些基本的PHP基准测试,我发现在github:
<?php
$startTime = time();
$runSeconds = 5;
$rounds = 5;
$count = 0;
for ($i=0; $i<$rounds; $i++) {
while ((time()-$startTime) <= $runSeconds) {
serialize(['bar'=>'foo']);
$count ++;
}
$round = $i+1;
$startTime += $runSeconds;
$count = number_format($count);
echo "Round {$round}: {$count} /per {$runSeconds} second\n";
$count = 0;
}
在我的主机PHP 7.4上的结果:
Round 1: 93,052,589 /per 5 second
Round 2: 89,096,400 /per 5 second
Round 3: 89,190,317 /per 5 second
Round 4: 89,145,362 /per 5 second
Round 5: 88,923,066 /per 5 second
Docker PHP 7.4
Round 1: 18,937,581 /per 5 second
Round 2: 16,089,889 /per 5 second
Round 3: 16,083,545 /per 5 second
Round 4: 16,087,953 /per 5 second
Round 5: 16,079,214 /per 5 second
这是一个巨大的差异。是否有一些共同的瓶颈,解释了巨大的差异?
我认为Docker没有太多的开销,至少开销应该是可以忽略不计的-但5倍慢的性能已经是很多,我认为。
1条答案
按热度按时间6mw9ycah1#
我可以使用一个非常类似的测试来确认
Alpine
在我的机器上的执行速度明显更慢。看起来它可能与不同的底层库和不同的内核选项有关(例如,RAM大页面被禁用,opcache不会从中受益)。
比较(越高越好,即25秒内的迭代计数,opcache已禁用):
测试片段: