![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Dutchak Vitaly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.3.2007 Репутация: нет Всего: нет |
Добрый день. Возникла необходимость написать парсер на PHP, который за проход должен парсить порядка 10000 страниц.
Но вот беда - много памяти жрет, хотя memory_limit стоит 64M - apache сжирает 1GB оперативы + 2GB свопа за 1000 распарсенных страниц. memory_get_usage показывает, что памяти под конец скрипта сжирается порядка 22-26MB. Server version: Apache/2.2.17 (Ubuntu) PHP 5.3.5 Может кто сталкивался с такой проблемой? |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
пожалей сервер, в очередь ставь
-------------------- Amazing |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Что применяете в парсере по шагам мы не телепаты и гадать можем сколько угодно, какие библиотеки, парсите данные из БД или удаленный файл.
Разумным выходом и быстрым решением будет уменьшение количество страниц за проход если файлы получаем удаленно. также утечка может быть в незавершённых соединениях так как они имеют свойство зависать поэтому лучше сперва занести в БД потом раскидать по таблицам что нужно, другим скриптом обрабатывать из БД и ставить статусы задачи, (обработка , выполнено итд ) -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| Dutchak Vitaly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.3.2007 Репутация: нет Всего: нет |
Скрипт ходит по сайту и парсит HTML. В качестве парсера использую phpQuery.
Для получения HTML использовал CURL, но потом переделал на get_headers + file_get_contents - никакой разницы при потреблении памяти нет. Везде расставлены unset, GarbageCollector включен в пике скрипт ест 30-40MB, а апач сжирает все что есть в системе. Кол-во файлов не уменьшить так просто, скрипт выполняет определенные задачи , и не известно сколько именно и каких страниц должен распарсить. В самом худшем случае около 10тыс. Тут или разобраться с памятью или делать живую очередь. |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
file_get_contents без опциий может тратить больше времени до2+ сек на получение информации рекомендую вернутся к curl multi
так как работает быстрей по времени. Также сделать тестовые замеры по коду путем тем же memory_get_usage(); Но думаю проблема в сетевой части. Если не уменьшить количество то тогда придется делать очереди с блокировками по сути будет выгоднее чем ждать когда скрипт ляжет или выполнит все + также даст возможность видеть что выполнил что нет. Это сообщение отредактировал(а) Sanchezzz - 17.7.2012, 11:02 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| Dutchak Vitaly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 10.3.2007 Репутация: нет Всего: нет |
Спасибо. Сам склоняюсь к этому варианту. так и сделаю
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |