今天闲的无聊看到群里有人争论Nginx与Apache执行PHP的效率问题。很早以前Apache确实执行PHP效率很高,但Nginx这么年迭代后我觉得执行PHP效率应该不差,所以来测试一下。
测试当然需要服务器,所以我在阿里云租了两台一样的服务器
宽带按计量10M
最终配置
先升级一下系统
sudo yum update
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
Nginx1.18+php7.0 & Apache2.4+php7.0
用于跑测试的代码
<?php
$a = array();
$b = new PerformanceTest();
$b->begin();
for($i=0;$i<10000;$i++){
$a[$i] = $i;
}
foreach($a as $i)
{
in_array($i, $a);
}
$b->end();
class PerformanceTest
{
private $time;
private $memory;
public function begin()
{
$this->time = $this->getTime();
$this->memory = $this->getMemory();
}
public function end()
{
$this->time = $this->getTime() - $this->time;
$this->time = round($this->time,7);//在这里才能格式化时间
$this->memory = $this->getMemory() - $this->memory;
$this->memory = $this->convert($this->memory);
echo "time:{$this->time}秒
";
echo "memory:{$this->memory}
";
}
public function getTime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
public function getMemory()
{
return memory_get_usage();
}
public function convert($size)
{
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
}
我们使用阿里云性能测试PTS来测试并发能力
因为本域名没有接入阿里云所以后改由IP:8081的方式访问测试
反正也搭建了顺便测试一下静态文件并发
页面是宝塔默认站点页面
test1是Nginx , test2是Apache
1-15/16=6.25%
1-138/271≈49.1%
宝塔默认配置情况下 Nginx与Apache执行PHP7.0效率差不多,Nginx略高6.25%(可以记作误差)
宝塔默认配置情况下 Nginx与Apache访问静态文件Nginx完胜,Nginx高近一半
学习了,啥时候跑跑php7.4和php8?
@缙哥哥
效率应该差距不大 PHP7.0~7.4主要是增加特性