#php #iis #fastcgi
#php #iis #fastcgi
Вопрос:
Чтобы проверить, как IIS создает новые процессы FastCGI, я создал простой пример.
- test.php
<?php
echo 'start:' . date("d.m.Y H:i:s", time());
sleep(10);
echo ';finish: ' . date("d.m.Y H:i:s", time());
?>
- start.bat
@echo off
set url=http://localhost:8093/test.php
for /l %%i in (1,1,20) do (
start %url%
)
Bat-файл выполняет test.php с функцией сна 20 раз почти одновременно. Но результаты немного неожиданны.
pid: 11716;start: 24.12.2020 12:18:16;finish: 24.12.2020 12:18:26
pid: 11716;start: 24.12.2020 12:18:26;finish: 24.12.2020 12:18:36
pid: 11716;start: 24.12.2020 12:18:36;finish: 24.12.2020 12:18:46
pid: 3660;start: 24.12.2020 12:18:36;finish: 24.12.2020 12:18:46
pid: 1316;start: 24.12.2020 12:18:36;finish: 24.12.2020 12:18:46
pid: 14788;start: 24.12.2020 12:18:36;finish: 24.12.2020 12:18:46
pid: 15752;start: 24.12.2020 12:18:37;finish: 24.12.2020 12:18:47
pid: 8836;start: 24.12.2020 12:18:37;finish: 24.12.2020 12:18:47
pid: 11716;start: 24.12.2020 12:18:46;finish: 24.12.2020 12:18:56
pid: 3660;start: 24.12.2020 12:18:46;finish: 24.12.2020 12:18:56
pid: 1316;start: 24.12.2020 12:18:46;finish: 24.12.2020 12:18:56
pid: 14788;start: 24.12.2020 12:18:46;finish: 24.12.2020 12:18:56
pid: 15752;start: 24.12.2020 12:18:47;finish: 24.12.2020 12:18:57
pid: 8836;start: 24.12.2020 12:18:47;finish: 24.12.2020 12:18:57
pid: 11716;start: 24.12.2020 12:18:56;finish: 24.12.2020 12:19:06
pid: 3660;start: 24.12.2020 12:18:56;finish: 24.12.2020 12:19:06
pid: 1316;start: 24.12.2020 12:18:56;finish: 24.12.2020 12:19:06
pid: 14788;start: 24.12.2020 12:18:56;finish: 24.12.2020 12:19:06
pid: 15752;start: 24.12.2020 12:18:57;finish: 24.12.2020 12:19:07
pid: 8836;start: 24.12.2020 12:18:57;finish: 24.12.2020 12:19:07
Итак, изначально IIS создал только один процесс — 11716, который выполнялся дважды, затем IIS создал еще 5 процессов, и каждый из этих 6 процессов выполнялся 3 раза. Я установил параметры MaxInstances= 200,
а параметр ThreadPool MaxProcesses= 100 перед тестированием.
Кто-нибудь может объяснить это поведение и как настроить IIS, чтобы запросы выполнялись параллельно?
Комментарии:
1. Фактическая логика планирования не документирована Microsoft, и нет никаких настроек для изменения того, что вы наблюдали. Кстати, имейте в виду, что Microsoft больше не поддерживает PHP, news-web.php.net/php.internals/110907
2. Я протестировал порядок выполнения процессов в соответствии с вашими настройками, как вы описали. Однако я обнаружил, что эти 6 процессов создаются не одновременно, IIS сначала создает процесс, процесс выполняется дважды (не одновременно), а затем создает 5 процессов. Таким образом, эти 6 процессов не создаются и не выполняются одновременно.
3. Поэтому я думаю, что это встроенный механизм IIS, он автоматически выберет оптимальное количество процессов и метод выполнения. И 6 процессов — это максимальное количество процессов, которые может создать IIS. Потому что, когда я устанавливаю для максимального экземпляра значение более 6, всегда создается только 6 процессов.
4. Я продолжил тестировать этот пример, используя разные веб-серверы (Apache и Nginx), также создал простой ASP. ЧИСТЫЙ пример. И все результаты были одинаковыми. Итак, я думаю, что Google Chrome отвечает за это поведение и создает эту задержку, когда есть много вкладок с одинаковым URL. Кроме того, это неправильный подход к нагрузочному тестированию. В конце концов я загрузил JMeter и выполнил примеры с 5-20 процессами, и он работал параллельно. Спасибо, за ответы.
5. Мне очень жаль, мои предыдущие мысли были ошибочными, и я надеюсь, что это не ввело вас в заблуждение. На самом деле IIS создал 6 процессов не потому, что автоматически выбирает наилучший механизм, а потому, что максимальное количество подключений к Google Chrome составляет всего 6. Когда я переключил IE, IIS создал больше процессов. Таким образом, количество процессов ограничено MaxInstance, а также ограничениями браузера .