Утечка памяти в php не связана с GC? - PullRequest
1 голос
/ 03 ноября 2011

У меня есть скрипт php, который берет изображение, обрабатывает его, а затем записывает новое изображение в файл. Я использую imagick / imagemagick с php 5.3.8 с fastcgi. После прочтения я подумал, что может быть полезна функция сбора мусора, но она не остановила использование памяти php в TOP от роста до трехзначных цифр. Я использовал для запуска этого скрипта в cron.

<?php
var_dump(gc_enabled()); // true
var_dump(gc_collect_cycles()); // number comes out to 0
?>

Не уверен, что делать. Пока единственное, что помогает контролировать php - это выполнять «перезагрузку службы php-fpm» каждый час или около того. Будет ли использование imagick в качестве совместно используемого ext вместо статически скомпилированной справки? Любые предложения или идеи с благодарностью.

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

Два варианта:

  • Разрабатывайте работу через механизатора или тому подобное для сценария, который полностью умрет.Обычно я провожу своих работников через определенное количество рабочих мест, а потом умираю.Они будут перезапущены супервизором в моей настройке, так что это не проблема.Смерть после N запросов просто позволяет избежать проблем с памятью.
  • Начиная с 5.4 это может помочь: http://ca3.php.net/manual/en/function.apache-child-terminate.php

Примечание о встроенных и внешних библиотеках.Я не играл с этим аспектом имиджевой магии, но видел это с GD.Вы получаете намного меньшее значение памяти из функций PHP, когда используете внешнюю библиотеку, но фактическое использование памяти почти равно.

0 голосов
/ 03 ноября 2011

Если PHP имеет много доступной памяти для использования, то он не потрудится стереть память, так как не считает, что это необходимо. Поскольку он использует больше или другие приложения начинают использовать больше памяти, он очищает память от того, что он может.

Вы можете принудительно очистить память для переменной, установив для нее значение NULL, но рекомендуется unset (), поскольку вам не нужно заставлять ее использовать меньше памяти, так как PHP самоочищается.

Но в противном случае для ответа на ваш вопрос потребуется фрагмент кода.

0 голосов
/ 03 ноября 2011

Хорошим началом проверки на утечки памяти является valgrind.

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