Я имею дело с очень странной проблемой тайм-аута в долго работающем скрипте и не могу отследить, где происходит тайм-аут. Какие методы вы бы использовали, чтобы определить, где это происходит, и записать, какая часть фактически выбрасывает тайм-аут?
Настроить:
AWS NLB (TCP 80/443 Listeners. Default Timeout is 350 Seconds) [1]
AWS ALB (HTTP 80/443 Listeners. Idle Timeout = 300 Seconds)
CentOS 7 Servers with PHP-FPM 7.3 and Apache 2.4.39
/etc/php.ini:
max_execution_time = 300
max_input_time = 60
MariaDB 10.3 on RDS.
Когда я пытаюсь запустить PHP-скрипт, который анализирует большой, уже загруженный CSV-файл, на моем сервере разработки и промежуточном сервере время ожидания для которых установлено намного выше, занимает ~ 3-4 минуты.
На моих живых серверах (описанных выше) он получает тайм-аут 504 за 90 секунд.
Так откуда же этот тайм-аут? Все значения установлены выше этого. У меня включен mod_reqtimeout для серверов dev / staging / live, но я никогда их не изменял, поэтому не уверен, почему это повлияет на одну настройку, а не на другую.
ОБНОВИТЬ:
Учитывая другой сервер, где mod_reqtimeout
модуль вызывал у меня проблемы, я просто решил полностью отключить его во всех экземплярах Apache за балансировщиком нагрузки. Это решило проблему, но теперь возникает вопрос:
Где в CentOS 7 хранятся значения mod_reqtimeout по умолчанию? Я могу найти его с помощью grep, а значения по умолчанию, объясненные Apache, не составляют в сумме до 90 секунд. [2]
RequestReadTimeout handshake=0 header=20-40,MinRate=500 body=20,MinRate=500
Источники:
1) Таймауты NLB