Большие массивы данных и освобождение ресурсов.

Вадим

Guest
Большие массивы данных и освобождение ресурсов.

Граждане любезные, есть такая нетривиальная для РНР задача.

- Имеется скрипт который в результате свое работы несколько раз лопатит массивы по 6-12 тыс. позиций, причем двуурвневые.

- Таких массивов за раз может выходить эдак до 20.

- После обработки каждого массива, скрипт пишет результат в файл.

- Псоле обработки около 30 Мб просто вылетает. Апач выдает пятисотую ошибку. Насколько я понимаю по нехватке ресурсов. Timelimit установлен по максимуму для этого скрипта.
 

Demiurg

Guest
для начала стоит выяснить причину ошибки. для этого php пишет логи ошибок.
 

Вадим

Guest
Да и еще вот схема работы (функции):

1. Считывание папок и внутренних файлов под парсинг (до 20 папок + до 15 Мб файлов).
2. Парсинг файлов и запись в массив.
3. Обработка массива.
4. Записьь массива по шаблону в файл.
5. Пункты 2-4 выполняются в цикле несколько раз в зависимости от кол-ва прочитанных папок. Общий объем обрабатываемой инфы может достигать 200 Мб.

К примеру на обработку 20 Мб. уходит порядка 28 сек.
max_execution_time = 1800
memory_limit = 128M
Пока работает на локалке под Win2000, потом будет на отдельном серваке.

P.S. Прошу придерживаться темы и не уводить в сторону, работа скрипта уже продумана и нужен конкретный совет "Как сделать чтобы он выполнял свою работу до конца, а не слетал по 500 ошибке".

Заранее очень признателен всем советам!!!

-~{}~ 19.02.05 21:45:

Ну если Логи то они таковы:

[Thu Dec 16 01:16:14 2004] [notice] Parent: Created child process 2256
[Thu Dec 16 01:16:14 2004] [notice] Child 2256: Child process is running
[Thu Dec 16 01:16:14 2004] [notice] Child 2256: Acquired the start mutex.
[Thu Dec 16 01:16:14 2004] [notice] Child 2256: Starting 250 worker threads.
[Thu Dec 16 01:16:41 2004] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Thu Dec 16 01:16:41 2004] [notice] Child 2256: Exit event signaled. Child process is ending.
[Thu Dec 16 01:16:42 2004] [notice] Child 2256: Released the start mutex
[Thu Dec 16 01:16:43 2004] [notice] Child 2256: Waiting for 250 worker threads to exit.
[Thu Dec 16 01:16:43 2004] [notice] Child 2256: All worker threads have exited.
[Thu Dec 16 01:16:43 2004] [notice] Child 2256: Child process is exiting
[Thu Dec 16 01:16:43 2004] [notice] Parent: Child process exited successfully.

Если честно, то я не очень то в них.
 

EugeneVC

Новичок
у тебя размер массива сколько бывает?
в мегобайтах?

Я писал недавно скрипт, жрущий много памяти, прихось пользоватся след. схемой.

$a= большой массив
используем $a
как только $a не нужна, сразу unset($a)

PS:
работа скрипта уже продумана
Всегда есть нескольков алгоритмов
 

Screjet

Новичок
Разбей алгоритм на этапы.
Ниче страшного, если операция займет 2-3 прохода.

(иначе, при маленькой оперативке, пхп будет работать в свопе, или будет вылетать с ошибкой 500, при лимите)
 

Вадим

Guest
Автор оригинала: EugeneVC
у тебя размер массива сколько бывает?
в мегобайтах?

Я писал недавно скрипт, жрущий много памяти, прихось пользоватся след. схемой.

$a= большой массив
используем $a
как только $a не нужна, сразу unset($a)

PS:

Всегда есть нескольков алгоритмов
Я в принципе по поводу этого и думал, но у меня ...
Блин торможу, попробу а потом расскажу как все получилось.
А массив бывает где-то 10-15 Мб, но он у меня перезаписывается с каждой итерацией.
Разбей алгоритм на этапы.
Ниче страшного, если операция займет 2-3 прохода.

(иначе, при маленькой оперативке, пхп будет работать в свопе, или будет вылетать с ошибкой 500, при лимите)
Это интересно как, пропарсить 200 метров, потом получившиеся 40 метров пихнуть в массив а потом уже распихивать по файлам?

Эврика !!! Во блин понял!!! Нужно еще после парсера подтирать. Вот кто все жрет.

Продолжение следует......
 
Сверху