8

自 2006 年以来,我有一个基于 php 的系统运行良好,它有一个后端(CLI、cron)进程,处理数百万条记录,在内存中使用大树状结构。

升级 debian 机器时,我注意到性能下降很大。

因此,为了研究这个问题,我编写了一个简单的脚本,并下载了十几个 xampp 版本,并使用不同的 php 版本运行相同的脚本。

$start=microtime(true);
$n=10;
$counter=1;
$testarray=Array();

for ($i[1]=0;$i[1]<$n;$i[1]++) 
  for ($i[2]=0;$i[2]<$n;$i[2]++) 
    for ($i[3]=0;$i[3]<$n;$i[3]++) 
      for ($i[4]=0;$i[4]<$n;$i[4]++) 
        for ($i[5]=0;$i[5]<$n;$i[5]++) 
          for ($i[6]=0;$i[6]<$n;$i[6]++) 
            for ($i[7]=0;$i[7]<$n;$i[7]++) 
              $testarray[$i[1]][$i[2]][$i[3]][$i[4]][$i[5]][$i[6]][$i[7]]=$counter++;

$end=microtime(true);
echo "PHP ".phpversion()." ".round(memory_get_peak_usage(true)/(1024*1024),2)." mbyte max ram, ".round($end-$start,2)." seconds\r\n";

我对 xampp win32 1.6.0a 到 win32 1.7.7-vc9 运行相同的脚本,结果如​​下:

 - PHP 5.2.1 890.25 mbyte max ram, 12.43 seconds
 - PHP 5.2.1 890.25 mbyte max ram, 12.37 seconds
 - PHP 5.2.2 890.25 mbyte max ram, 12.43 seconds
 - PHP 5.2.3 890.25 mbyte max ram, 12.38 seconds
 - PHP 5.2.4 890.25 mbyte max ram, 12.5 seconds
 - PHP 5.2.5 890.25 mbyte max ram, 12.28 seconds
 - PHP 5.2.5 890.25 mbyte max ram, 12.31 seconds
 - PHP 5.2.6 890.25 mbyte max ram, 12.52 seconds
 - PHP 5.2.6 890.25 mbyte max ram, 12.54 seconds
 - PHP 5.2.8 890.25 mbyte max ram, 12.72 seconds
 - PHP 5.2.9 890.25 mbyte max ram, 12.53 seconds
 - PHP 5.3.0 975.5 mbyte max ram, 18.28 seconds
 - PHP 5.3.1 975.5 mbyte max ram, 18.06 seconds
 - PHP 5.3.5 975.5 mbyte max ram, 18.49 seconds
 - PHP 5.3.8 975.5 mbyte max ram, 17.97 seconds
 - PHP 5.3.8 975.5 mbyte max ram, 18.11 seconds

注意: - 我不在服务器上使用 xampp 或 windows,但这是一次测试不同版本的最简单方法。- 我尝试用谷歌搜索这个问题几次,但没有得到任何相关结果 - 服务器上的速度损失大致相同(运行时间延长 50%) - 我不认为这种减速是任何框架或编译器都可以接受,即使有新功能,旧功能也应该像以前一样工作。我不能告诉我的老板,使用相同软件的同一台计算机不能再做同样的工作了,因为我们对它的 debian 进行了 dist-upgrade... 这看起来像是一些 windows 升级。:)

有任何想法吗?

4

1 回答 1

4

在循环之前调用gc_disable ()。把我的时间减半。

(php 在 5.3 中添加了一个新的垃圾收集器)

于 2012-05-21T23:22:47.933 回答