Неожиданная смерть cli-скрипта

  • Автор темы Автор темы sgrin
  • Дата начала Дата начала

sgrin

Guest
Неожиданная смерть cli-скрипта

Есть скрипт, выполняющийся по cron'у и обрабатывающий большой (~55 Mb) xml-файл.
Команда выглядит так (запускается из shell-скрипта):

unzip -p big_xml_file.zip | xml_to_db.php

Скрипт успевает обработать около 3х Мб, а потом:

update.sh: line 59: 20354 Done unzip -p big_xml_file.zip
20355 Killed | xml_to_db.php

Все это происходит на хостинге и результат получаю по почте.

Версия php 4.3.10
max_execution_time => 0
max_input_time => 30
memory_limit => 72M

Подскажите, пожалуйста, что это может быть, и как бы узнать, в чем причина.
 
наверное выходишь за memory_limit
ты ведь этому процессу (xml_to_db.php) передаешь весь распакованный файл, и в нем же его обрабатываешь
как вариант, сначала распаковывай в отдельный файл, потом кусочками читай
 
Вставил в скрипт периодический вывод memory_get_usage() - успевает дойти до 3х мегабайт
Или эта функция что-то другое показывает?
 
да, только если ты посмотришь на вывод команды `ps` - увидишь совсем другие цифры в колонках VSZ и RSS
а вот по какому значению php убивает процесс, это надо спросить у тех, кто видел исходники
 
увеличил memory_limit до 150 Мб - все равно дальше ни на байт не проходит :(
Но проверить надо...
Спасибо за помощь, iliah

PS Влияет ли здесь max_input_time ?
 
в мане написано, что влияет на "POST, GET and file uploads"
относится ли сюда время передачи аргументов командной строки в скрипт, не знаю,
но в любом случае 30 сек на распаковку твоего файла должно хватать
 
На хостинге не полные отморозки, а потому ограничивают время CPU юзерских процессов.

Закачивай себе на рабочую машину и там проводи манипуляции.
 
Пришел ответ от службы поддержки:
причина в загрузке cpu
script used 60% CPU time in 3 seconds.
1 hits, 0 left

script used 64% CPU time in 3 seconds.
2 hits, sent SIGKILL

Я так понял, скрипт превышает ограничение(видимо 60%) нагрузки CPU в течение 3 секунд, да еще и два раза :)

Может кто-нибудь знает, как снизить эту нагрузку - поделитесь, пожалуйста.
 
_ничего_ты_не_сделаешь_
Это ОСь ограничивает использование процессора. Тебе отведено, скажем, 1000 тактов и все.(точка) Не вложился = это твои проблемы.
А если хочешь решать всякого рода задачи посредством сервера, покупай выделенный сервер.

зы. Если найдешь дыру, как обойти ограничение процессорного времени, пиши!
 
Похоже на то, что ограничена именно нагрузка на CPU, то есть, если скрипт не очень грузит процессор, то выполняться может долго... если нет других ограничений :)

Пробовал снизить нагрузку с помощью nice - не помогло
Тогда вставил в ключевые места скрипта usleep - пока работает, но медленно :)

Если пройдет нормально, надо будет подбирать параметр usleep, чтоб не убили, но и не тормозил...

Спасобо за помощь
 
хммм, а можт разбивать архив на несколько кусков и обрабатывать скажем не более 300K, потом делать fork и новым процессом продолжать? :)
ну или сразу форкаться штук в 100 процессов.
правда фрядли сие хостеру понравится :)
 
Сверху