|
0 / 0 / 0
Регистрация: 27.08.2013
Сообщений: 8
|
|
Выявить утечку памяти23.08.2014, 21:44. Показов 7343. Ответов 19
Метки нет (Все метки)
Здравствуйте. Написал парсер с библиотекой для парсинга simple_html_dom. После длительного парсинга видно, что память переполняется. Можно ли как то узнать, в каком месте идет переполнение памяти ? Профайлер может
0
|
|
| 23.08.2014, 21:44 | |
|
Ответы с готовыми решениями:
19
Выделение памяти, проверка на утечку памяти Найти утечку памяти Проверка на утечку памяти |
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
|
| 24.08.2014, 17:57 | |
|
Пробовал ловить утечки памяти в большом проекте - дело совершенно неблагодарное.
Первое что я сделал - попробовал повтыкать везде memory_get_usage, - ничего толком не получилось. Потом я попробовал подключится через отладчик, - повыполнять скрипт пошагово, посмотреть где какие-то свойства на новой итерации забываются.. ничего не нашел - было слишком много начинки внутри фреймворка. Потом пробовал различные профайлеры - они в принципе ничего не дали, кроме красивой картинки.. Еще помню пробовал играться с версией PHP, накатывать различные патчи.. ничего особо не помогло.. =) Затем я вернулся к первому способу и таки нашел утечку памяти.. в PECL'овом расширении amqp для PHP.. Соответственно не могу ничего конкретного посоветовать, - утечки памяти ловить сложнее других ошибок и конкретного рецепта как с ними бороться - не существует.
0
|
|
|
168 / 0 / 1
Регистрация: 25.08.2014
Сообщений: 6
|
|
| 25.08.2014, 13:27 | |
|
simple_html_dom - это PHP библиотека, поэтому говорить об "утечке" памяти тут не приходится. PHP устроен так, что для каждой сессии(клиентского запроса от веб-сервера или другого SAPI) образует отдельный блок памяти(ограниченный сверху настройками), который привязан к этой сессии. Превышение лимита дает всем знакомое сообщение, в котором как раз и указано - где именно осуществляют попытку выделить очередной кусок из блока, который становится фатальным. Важно понимать, что не только PHP код может вызвать превышение лимита - каждый include`нутый файл представляет собой байт-код(+к использованной памяти), служебные структуры, описывающие контекст этого байт-кода(+к использованной памяти) и много чего еще(даже отложенное создание классов на деле реализовано как дублирование записи в соответствующей hash-таблице).
По-сему: 1. unset переменных, которые далее по коду не нужны 2. повышение лимита в настройках
0
|
|
|
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
|
|
| 25.08.2014, 14:46 | |
|
по-моему сам simple_html_dom довольно кривоватый, пользовался им, возникали такие же проблемы при больших объемах, поэтому если не слишком сложный парсинг, лучше использовать регулярки, также посоветовал бы вам обратить внимание на PHPQuery
0
|
|
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
||||||||||
| 25.08.2014, 16:43 | ||||||||||
|
asmprog, речь очевидно идет о CLI-демоне, ваше сообщение немного о другом.
0
|
||||||||||
|
168 / 0 / 1
Регистрация: 25.08.2014
Сообщений: 6
|
|||||
| 25.08.2014, 17:50 | |||||
CLI-демон(Command Line Interface?) =) Глупости вашей нет предела? =) Или может быть все таки CGI(FastCGI)-демон? Да будет Вам известно, что все что "компилирует" PHP код называется SAPI и поддерживает общий интерфейс, в рамках которого требуется вызывать функции движка PHP php_request_startup/php_request_shutdown для обозначения "границ" запроса клиента перед непосредственной компиляцией PHP кода.P.S. не советую Вам, Tatikoma, пороть хрень с умным видом(не в лучшем свете себя выставляете), а уж тем более спорить со мной о внутренностях интерпретатора(движка Zend в частности), поскольку я уже года 3 копаюсь в исходниках, а вот Вы в элементарных вещах умудрились запутаться.
0
|
|||||
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
||||||||||
| 25.08.2014, 21:54 | ||||||||||
|
asmprog, вы зря употребляете слово "компиляция" к PHP-коду, т.к. ни трансляция в байт-код, не исполнение байт-кода компиляцией по-факту не является.
PS: Даже не нашелся что ответить на ваш выпад в послесловии. Предлагаю воздержаться от перехода на личности и сохранить нетралитет дискуссии, т.к. сливание обсуждения в холивар - плохая привычка.
0
|
||||||||||
|
168 / 0 / 1
Регистрация: 25.08.2014
Сообщений: 6
|
||||||||||||||||||||||||||||||||||||||||||||
| 26.08.2014, 18:37 | ||||||||||||||||||||||||||||||||||||||||||||
![]() Перечитал, вот полная цитата(Вы в отдельном мире живете, где "длительный парсинг" равнозначен "нескольким итерациям цикла"?):
1. Движок Zend регистрирует ф-цию test, разбирает ее на байт-код И ДОБАВЛЯЕТ В КОНЦЕ ОПКОД ZEND_RETURN 2. Переводит в байт-код вызов ф-ции test 3. Добавляет в конце безымянной ф-ции(точки входа) опкод ZEND_RETURN 4. Затирает опкод ZEND_DECLARE_FUNCTION опкодом ZEND_NOP(второй проход) При вызове test, когда курсор виртуальной машины дойдет до опкода ZEND_RETURN в конце обработчика опкода(можно посмотреть в файле Zend\zend_vm_def.h) происходит передача управления хелперу
zval_ptr_dtor при этом является макросом, указывающим на функцию
----------------------------------------------- ---------------------НО----------------------- Все это происходит КОГДА осуществляется выход из ф-ции. А вот то, о чем я говорил:
0
|
||||||||||||||||||||||||||||||||||||||||||||
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
||
| 27.08.2014, 11:10 | ||
|
Случайно забытый элемент массива - чем не утечка памяти?
0
|
||
|
168 / 0 / 1
Регистрация: 25.08.2014
Сообщений: 6
|
||
| 27.08.2014, 11:39 | ||
|
0
|
||
| 27.08.2014, 12:21 | |
|
0
|
|
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
| 27.08.2014, 13:59 | |
|
Мда.. Веселое обсуждение, нечего сказать. Столько слов об утечке памяти.. И что-то никто не предложил, к примеру, парсить xml по частям. Непонятно, чем тут поможет то, что будешь знать место "утечки"
0
|
|
|
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
|
|
| 27.08.2014, 14:04 | |
|
я ошибаюсь, или человек парсит контент с другого сайта а не с xml?
0
|
|
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
| 27.08.2014, 14:06 | |
|
html, xml, какая разница.. А вот то, что с другого сайта - необязательно. Но если дело в этом, то, скорее всего, стоит сначала перекинуть контент к себе и парсить локально
0
|
|
|
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
|
|
| 27.08.2014, 14:11 | |
|
наверное вы правы, но мы не узнаем истины, пока создатель темы не скажет, что он парсит
0
|
|
| 27.08.2014, 14:30 | |
|
0
|
|
| 27.08.2014, 14:31 | |
|
Не по теме: Игорь[Igor], :D
0
|
|
| 27.08.2014, 18:10 | |
|
0
|
|
| 27.08.2014, 19:31 | |
|
0
|
|
| 27.08.2014, 19:31 | |
|
Помогаю со студенческими работами здесь
20
Проверка на утечку памяти Изолировать утечку памяти
Определить утечку памяти Как устранить утечку памяти? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|