Вопрос утечки памяти php - PullRequest
0 голосов
/ 29 декабря 2010

У меня ужасное количество проблем со скриптом синтаксического анализа XML, из-за которого в PHP возникает нехватка памяти.

Я нашел решение, переписав весь свой код ООП на не ООП, который в основном был проверкой и вставкой базы данных, и это, казалось, закрыло дыру, но мне любопытно, что вызвало это? Я использую Zend Framework, и после того, как я удалил все модели, утечек нет.

Просто чтобы дать вам и понять, как это было плохо: Я пробегаю около 30 тыс. Элементов на том же количестве файлов. Итак, по одному на файл. Это началось с использованием 5 МБ !!! или ОЗУ, когда размер самого файла составлял всего около 20 КБ.

Может быть, это те ссылки, о которых я читал? Я думал, что эта ошибка была исправлена?!

EDIT

Я обнаружил, что утечка произошла из-за использования классов базы данных Zend Framework. Есть ли способ вызывать функцию отключения после каждой итерации, чтобы очистить ресурсы?

1 Ответ

1 голос
/ 29 декабря 2010

Сложно ответить на этот вопрос, поскольку у нас нет кода для работы.

Вернитесь к OOP-версии ваших исходных кодов и создайте небольшой класс, например:

abstract class MemoryLeakLogger
{
     public static $_logs = array();

     public function Start($id,$action)
     {
          self::$_logs[$id] = array(
              'action' => $action,
              'start_ts' => microtime(),
              'memory_start' => memory_get_usage()
          );
     }

     public function End($id)
     {
          self::$_logs[$id]['end_ts'] = microtime();
          self::$_logs[$id]['memory_end'] = memory_get_usage();
     }

     public static function GetInformation(){return self::$_logs;}
}

а затем в вашем приложении сделайте следующее:

MemoryLeakLogger::Start(":xml_parse_links_set_2", "parsing set to of links");
/*
    * Here you would do the relative code
*/
MemoryLeakLogger::End(":xml_parse_links_set_2");

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

Вы также можете использовать xdebug для отслеживания вашего приложения.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...