@kirill-93

Почему PHP так работает?

Есть PHP скрипт следующего содержания:
$id = rand(1000, 10000);

file_put_contents('./result.txt', "Request " . $id . ' ' . date('H:i:s') . PHP_EOL, FILE_APPEND);

sleep(10);
 
file_put_contents('./result.txt', "Inner Request " . $id . ' ' . date('H:i:s') . PHP_EOL, FILE_APPEND);

Скрипт генерирует айди для запроса, чтоб их отличать, пишет в файл две строки, но между первой и второй записью "спит" 10 секунд.
На этот скрипт отправляем параллельные запросы с помощью ab
ab -k -c 4 -n 4 localhost:9998/

То есть 4 параллельных запроса.
PHP работает как php-fpm, max_children = 5.
То есть я ожидаю, что 4 запроса придут, запишут в файл строку, затем повисят 10 секунд и запишут вторую строку.
На деле самый первый запрос выполняется 10 секунд, а вот все последующие выполняются параллельно.
62842bec0103f408664259.png
Почему так?
  • Вопрос задан
  • 443 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
режим pm какой в настройках? если не static то количество текущих процессов веб сервера будут зависеть от нагрузки, полагаю которую он считает по завершению каждого запроса, в динамическом режиме сначала выбран 1 процесс, поэтому у тебя отрабатывает только один запрос остальным некем обрабатываться, после чего php-fpm понимает чтонагрузка высокая и поднимает количество потоков до max_children и остальные запросы обрабатываются паралельно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы