|
|
|
| Я пишу скрипт, обрабатывающий накопленную в базе информацию. По мере того, как увеличивается количество решаемых скриптом задач и наращивается содержащийся в нем код, время исполнения скрипта увеличивается. Я это время измеряю автоматически и записываю в текстовые файлы для контроля.
После того, как я добавил очередной поиск, время исполнения скрипта составило 350 секунд. Хотя в настройках рнр по умолчанию задан предел в 30 секунд, скрипт, как ни странно, исполнился целиком.
Но это случилось лишь пару раз.
При последующих попытках скрипт просто останавливался без всякого сообщения о причинах.
Добавил в начало Но ситуация не изменилась: примерно через две минуты скрипт просто останавливается. И чего с ним делать, я понять не могу... | |
|
|
|
|
|
|
|
для: Владимир55
(02.03.2009 в 16:00)
| | время, ограничиваемое set_time_limit - это лишь чистое время которое php-скрипт занимает центральный процессор.
Есть еще операции ввода/вывода и ожидание исполнения запросов сторонними серверами ( MySQL например).
Время в 30 секунд ограничено не просто так.
Обычно http-соединения (браузер - сервер) будут отваливаться, если сервер долго не отвечает.
Наверное у Вас так всё и происходит.
Процесс, исполняющийся 350 секунд, нужно рабивать на шаги более короткие.
Можно даже сделать так, чтобы предыдущий шаг автоматически вызывал последующий.
Во-первых, это позволит избежать таких отключений, во-вторых, даст возможность мониторить весь процесс.
Если 350 секунд исполняется единственный SQL-запрос - тут дело другое...
Тогда нужно смотреть схему БД и организацию работы с ней. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2009 в 16:08)
| | "Обычно http-соединения (браузер - сервер) будут отваливаться, если сервер долго не отвечает.
Наверное у Вас так всё и происходит. "
Я это предусмотрел: при начале работы скрипт делает запись в текстовый файл, а при завершении работы делает еще одну запись. Так что я вижу: поиск не завершился.
"Процесс, исполняющийся 350 секунд, нужно рабивать на шаги более короткие.
Можно даже сделать так, чтобы предыдущий шаг автоматически вызывал последующий"
Правильно ли я понял, что для корректной работы в любом случае, ВСЕГДА надо уложиться в 30 секунд?
А если задача требует большего времени, то надо разбить ее на части и код, реализующий каждую из этих частей, разместить на своем отдельном файле, связав все файлы воедино безусловными переходами?
==================
А иной раз через 1-2 минуты, хотя лимит полчаса, появляется сообщение:
"504 Gateway Time-out
nginx/0.6.35"
Это не дает дополнительной информации? | |
|
|
|
|
|
|
|
для: Владимир55
(02.03.2009 в 16:28)
| | >Я это предусмотрел: при начале работы скрипт делает запись в текстовый файл, а при завершении работы делает еще одну запись. Так что я вижу: поиск не завершился.
Тут я на 100% не скажу, но вполне возможно, что apache, потеряв соединнение, может просто прибить php-процесс... Результатом то является отклик браузеру, а любой другой эффект - формально - побочный.
>Правильно ли я понял, что для корректной работы в любом случае, ВСЕГДА надо уложиться в 30 секунд?
Надо уложиться в таймауты цепочки серверов.
Таймаут сервера apache по умолчанию 300 секунд.
Возможно, Вы певысили именно его.
>А если задача требует большего времени, то надо разбить ее на части и код, реализующий каждую из этих частей, разместить на своем отдельном файле, связав все файлы воедино безусловными переходами?
Необязательно в разные файлы.
Обязательно разными запросами. | |
|
|
|
|
|
|
|
для: Trianon
(02.03.2009 в 16:59)
| | "Результатом то является отклик браузеру, а любой другой эффект - формально - побочный"
Нюанс в том, что это сейчас, при настройке, результатом является отклик броузеру. А вообще-то скрипт будет запускаться Cron.
В связи с этом, может быть следует удалить из скрипта все echo после завершения его настройки? | |
|
|
|