/ / php7 виходить з ладу на багатоядерному сервері Windows - windows, багатоядерний, php-7

php7 не вдається на Windows багатокористувацький сервер - windows, multicore, php-7

У моїй програмі з'явилася помилка змінної $ _GET, що не існує в Windows 2008 R2 з 4 ядрами процесора.

Тому я створив цей простий код для тестування.

<?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 для відповіді № 1

Яку збірку PHP ви використовуєте?

Від PHP.net сторінка завантаження Windows :

Apache

Будь ласка, використовуйте конструкції Apache, надані Apache Lounge. Вони забезпечують складання VC9,> VC11 і VC14 Apache для x86 і x64. Ми використовуємо їх двійкові файли для створення SAPI Apache.

Якщо ви використовуєте PHP як модуль зі збіркою Apacheз apache.org (не> рекомендовано) вам потрібно використовувати старіші версії PHP VC6, зібрані з> спадковим компілятором Visual Studio 6. НЕ використовуйте версії PHP VC9 + з бінарними файлами apache.org.

З Apache вам потрібно використовувати версії PHP Thread Safe (TS).