2016-07-26 7 views
1

アプリケーションに$ _GET変数のエラーが発生しましたが、Windows 2008 R2に4つのCPUコアがあります。Windowsマルチコアサーバーでphp7が失敗する

私はこの簡単なコードをテストするために作成しました。

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

そして、約2500rpsの15スレッドで呼び出す簡単なJMeterテストを作成しました。

私はそれを1つのコアCPUで実行すると、エラーなしで何百万もの要求に対して動作しますが、4つのCPUを持つサーバーで実行すると、約10,000回の要求の後で$ _GET変数は設定されなくなります。

また、$ _POST、$ _SERVER、$ _COOKIE、$ _SESSIONでテストを繰り返しました。そして結果は同じでした。

PHPをバージョン5.6にダウングレードすると、4CPUで正常に動作します。

Apache CPUアフィニティを1つのCPUに設定すると、それも機能します。

実行中: PHP/7.0.8でApache/2.4.18(Win64)を実行しています。 Vultr.comでホストされている、CPUが4個でRAM容量が4GBのWindows 2008 R2を搭載したVMで、SSD。

PHP 7の既知の問題ですか?

答えて

1

どのようなPHPビルドを使用していますか? PHP.net Windows download pageから

アパッチ

Apacheのラウンジで提供されているApacheのビルドを使用してください。彼らはx86とx64用のVC9、> VC11とVC14ビルドを提供しています。私たちはバイナリを使ってApache SAPIをビルドします。

apache.orgからApacheビルドのモジュールとしてPHPを使用している場合(推奨されていない)、従来のVisual Studio 6コンパイラでコンパイルされた古いVC6バージョンのPHPを使用する必要があります。 > apache.orgバイナリでVC9 +のPHPを使用しないでください。

Apacheでは、スレッドセーフ(TS)バージョンのPHPを使用する必要があります。

+0

私はバージョン7.0.8で64ビットのスレッドセーフを使用しています。[http://windows.php.net/download#php-7.0](http://windows.php.net/download#)からダウンロードしてください。 php-7.0)。そしてApache LoungeのApache。 –

関連する問題