2016-07-26 7 views
1

Мое приложение получало ошибку переменной $ _GET, которая не существует в Windows 2008 R2 с 4 ядрами процессора.Ошибка php7 на многоядерном сервере Windows

Так что я создал этот простой код для тестирования.

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

И создал простой тест JMeter, чтобы назвать его 15 потоками, около 2500 об/мин.

Когда я запускаю его в одном основном процессоре, он работает для миллионов запросов без ошибок, но при запуске на сервере с 4 процессорами, после примерно 10 000 запросов переменная $ _GET больше не устанавливается.

Я также повторил тест с $ _POST, $ _SERVER, $ _COOKIE и $ _SESSION. И результат был тот же.

При понижении PHP до версии 5.6 он отлично работает (с 4-мя процессорами).

Когда вы устанавливаете близость процессора Apache к одному процессору, он также работает.

Я бегу: Apache/2.4.18 (Win64) с PHP/7.0.8. В VM с Windows 2008 R2 с 4 процессорами и 4 ГБ оперативной памяти, SSD, размещенный на Vultr.com.

Является ли эта проблема проблемой PHP 7?

ответ

1

Какую сборку PHP вы используете?

От PHP.net Windows download page:

Apache

Пожалуйста, используйте Apache сборках обеспечивается Apache Lounge. Они обеспечивают VC9,> VC11 и VC14 сборки Apache для x86 и x64. Мы используем их двоичные файлы для> сборки Apache SAPI.

Если вы используете PHP как модуль с абакскими сборками с apache.org (не рекомендуется), вам нужно использовать старые версии VC6 PHP, скомпилированные с> устаревшим компилятором Visual Studio 6. НЕ используйте версии VC9 + PHP с> двоичными файлами apache.org.

С помощью Apache вы должны использовать версии Thread Safe (TS) для PHP.

+0

Я использую версию 7.0.8 64-разрядную поточную безопасность, загруженную с [http://windows.php.net/download#php-7.0](http://windows.php.net/download# PHP-7.0). И apache из Apache Lounge. –