Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Самопроизольная остановка скрипта с базой.
 
 автор: Владимир55   (02.03.2009 в 16:00)   письмо автору
 
 

Я пишу скрипт, обрабатывающий накопленную в базе информацию. По мере того, как увеличивается количество решаемых скриптом задач и наращивается содержащийся в нем код, время исполнения скрипта увеличивается. Я это время измеряю автоматически и записываю в текстовые файлы для контроля.

После того, как я добавил очередной поиск, время исполнения скрипта составило 350 секунд. Хотя в настройках рнр по умолчанию задан предел в 30 секунд, скрипт, как ни странно, исполнился целиком.

Но это случилось лишь пару раз.

При последующих попытках скрипт просто останавливался без всякого сообщения о причинах.

Добавил в начало
set_time_limit(1800);
Но ситуация не изменилась: примерно через две минуты скрипт просто останавливается. И чего с ним делать, я понять не могу...

  Ответить  
 
 автор: Trianon   (02.03.2009 в 16:08)   письмо автору
 
   для: Владимир55   (02.03.2009 в 16:00)
 

время, ограничиваемое set_time_limit - это лишь чистое время которое php-скрипт занимает центральный процессор.
Есть еще операции ввода/вывода и ожидание исполнения запросов сторонними серверами ( MySQL например).

Время в 30 секунд ограничено не просто так.
Обычно http-соединения (браузер - сервер) будут отваливаться, если сервер долго не отвечает.
Наверное у Вас так всё и происходит.

Процесс, исполняющийся 350 секунд, нужно рабивать на шаги более короткие.
Можно даже сделать так, чтобы предыдущий шаг автоматически вызывал последующий.
Во-первых, это позволит избежать таких отключений, во-вторых, даст возможность мониторить весь процесс.

Если 350 секунд исполняется единственный SQL-запрос - тут дело другое...
Тогда нужно смотреть схему БД и организацию работы с ней.

  Ответить  
 
 автор: Владимир55   (02.03.2009 в 16:28)   письмо автору
 
   для: Trianon   (02.03.2009 в 16:08)
 

"Обычно http-соединения (браузер - сервер) будут отваливаться, если сервер долго не отвечает.
Наверное у Вас так всё и происходит. "

Я это предусмотрел: при начале работы скрипт делает запись в текстовый файл, а при завершении работы делает еще одну запись. Так что я вижу: поиск не завершился.


"Процесс, исполняющийся 350 секунд, нужно рабивать на шаги более короткие.
Можно даже сделать так, чтобы предыдущий шаг автоматически вызывал последующий"

Правильно ли я понял, что для корректной работы в любом случае, ВСЕГДА надо уложиться в 30 секунд?

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

==================
А иной раз через 1-2 минуты, хотя лимит полчаса, появляется сообщение:
"504 Gateway Time-out
nginx/0.6.35"

Это не дает дополнительной информации?

  Ответить  
 
 автор: Trianon   (02.03.2009 в 16:59)   письмо автору
 
   для: Владимир55   (02.03.2009 в 16:28)
 

>Я это предусмотрел: при начале работы скрипт делает запись в текстовый файл, а при завершении работы делает еще одну запись. Так что я вижу: поиск не завершился.

Тут я на 100% не скажу, но вполне возможно, что apache, потеряв соединнение, может просто прибить php-процесс... Результатом то является отклик браузеру, а любой другой эффект - формально - побочный.


>Правильно ли я понял, что для корректной работы в любом случае, ВСЕГДА надо уложиться в 30 секунд?

Надо уложиться в таймауты цепочки серверов.
Таймаут сервера apache по умолчанию 300 секунд.
Возможно, Вы певысили именно его.


>А если задача требует большего времени, то надо разбить ее на части и код, реализующий каждую из этих частей, разместить на своем отдельном файле, связав все файлы воедино безусловными переходами?
Необязательно в разные файлы.
Обязательно разными запросами.

  Ответить  
 
 автор: Владимир55   (02.03.2009 в 17:07)   письмо автору
 
   для: Trianon   (02.03.2009 в 16:59)
 

"Результатом то является отклик браузеру, а любой другой эффект - формально - побочный"

Нюанс в том, что это сейчас, при настройке, результатом является отклик броузеру. А вообще-то скрипт будет запускаться Cron.

В связи с этом, может быть следует удалить из скрипта все echo после завершения его настройки?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования