Назад | Перейти на главную страницу

Пытаемся понять тайм-аут / архитектуру Apache

У меня есть система CentOS версии 6.3 с Apache httpd 2.2.15 и PHP 5.3.3.

Мой веб-сайт PHP работает нормально, за исключением одного запроса, для которого явно исчерпан лимит времени ожидания. На выполнение запроса теперь требуется более 60 секунд, и в результате браузеры пользователей просто ждут - гораздо дольше, около 5 минут или более - перед тем, как показать пустую страницу.

Это заставило меня задуматься, как работает Apache / PHP.

Я создал простой тестовый сценарий PHP-скрипта, который просто выполняет следующие действия:

Когда таймаут составляет 55 секунд, все работает, как ожидалось; мой браузер вращается в ожидании 55 секунд, а затем отображает HTML.

Когда я устанавливаю тайм-аут на 65 секунд, браузер вращается в течение 5 минут или более, прежде чем отобразить полностью пустую страницу. Между тем:

Я попытался изменить пару параметров конфигурации, которые мне показались актуальными:

Но тестовый пример по-прежнему работал точно так же; браузер "зависает" даже после того, как страница возвращается через 65 секунд. Так обстоит дело с несколькими версиями Firefox.

Может ли кто-нибудь помочь мне понять, как здесь все работает? И, во-вторых, как я могу увеличить эффективный лимит тайм-аута, чтобы мой медленный запрос мог выполняться более 60 секунд и успешно возвращать результаты в браузер?

Я ожидал, что, если бы в Apache было ограничение - «не ждите более 60 секунд, пока PHP выполнит запрос» - тогда он либо вернет браузеру какую-то ошибку по прошествии 60 секунд, либо иначе зарегистрируйте другую ошибку. Вместо этого я вижу, как PHP выполняется до завершения, журнал доступа Apache сообщает мне: «Эй, все прошло нормально, я отправил 75 байтов вывода в браузер», но сам браузер просто сидит там, никогда не получая этого вывода. Что молчаливо «отключается»? Если Apache никогда не отправляет ошибку и позволяет PHP работать до завершения, почему он не отправляет результаты обратно (как это указано в журнале доступа)?

Большое спасибо за любую помощь.

Обновите все 60-секундные значения в /etc/php.ini до 120 для тестирования. Если вы перезапустили Apache после изменения конфигурации, но проблема не исчезла, как описано, то, судя по описанию, это вызывает php.