php7在Windows多核服务器上失败

时间:2016-07-26 12:01:55

标签: windows multicore php-7

我的应用程序收到错误的$ _GET变量并不存在于具有4个CPU内核的Windows 2008 R2上。

所以我创建了这个简单的代码来测试。

<?php
if(!isset($_GET)){
    error_log("_GET is not set");
    echo "ERROR";
}else{
    echo "OK";
}

并创建了一个简单的JMeter测试,用15个线程调用它,大约2500 rps。

当我在一个单核CPU中运行它时,它适用于数百万个没有错误的请求,但是当在具有4个CPU的服务器中运行时,在大约10,000个请求之后,$ _GET变量不再被设置。

我还用$ _POST,$ _SERVER,$ _COOKIE和$ _SESSION重复测试。结果是一样的。

当将PHP降级到5.6版时,它可以正常工作(使用4个CPU)。

将Apache CPU亲和性设置为单个CPU时,它也可以正常工作。

我正在跑步: Apache / 2.4.18(Win64),PHP / 7.0.8。 在具有4个CPU和4GB RAM,SSD的Windows 2008 R2的VM中,托管在Vultr.com。

这是PHP 7的已知问题吗?

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的PHP?

来自PHP.net Windows download page

  

的Apache

     

请使用Apache Lounge提供的Apache版本。它们为x86和x64提供了Apache的VC9,&gt; VC11和VC14版本。我们使用他们的二进制文件来构建Apache SAPI。

     

如果您使用PHP作为apache.org上的Apache构建模块(不是&gt;推荐),则需要使用使用&gt;旧版Visual Studio 6编译器编译的旧VC6版本的PHP。不要将VC9 +版本的PHP与&gt; apache.org二进制文件一起使用。

     

使用Apache,您必须使用PHP的线程安全(TS)版本。