|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2011-08-01 17:01 UTC] glen at delfi dot ee
Description:
------------
$ php ~/im.php
Imagick 3.0.1
MEM: 630.96 KiB - START
MEM: 631.72 KiB - created $im
MEM: 631.93 KiB - Fetched width
MEM: 632.14 KiB - Fetched height
MEM: 632.14 KiB - destroyed $im
Reproduce code:
---------------
#!/usr/bin/php
<?php
function mem($msg) {
printf("MEM: %.2f KiB - %s\n", memory_get_usage() / 1024, $msg);
}
$input_file = "s.gif";
$ext = new ReflectionExtension('imagick');
echo "Imagick ", $ext->getVersion(), "\n";
mem('START');
$im = new Imagick($input_file);
mem('created $im');
$src_width = $im->getImageWidth();
mem("Fetched width");
$src_height = $im->getImageHeight();
mem("Fetched height");
$im->destroy();
mem('destroyed $im');
Expected result:
----------------
i'd expect memory being released if $im->destroy() is called
i tested this with various extension versions, 2.2.2, 3.0.1,
3.1.0b1 - all of them leaked memory
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 23:00:01 2025 UTC |
yet, even unset() does not release memory back, if i run imagick in a loop, and assign it to _same_ variable, that should release memory as the same variable is overassigned ($im = new Imagick()). so with this code, i'd expect memory being returned back when FINISH is reached, but it isn't. mem('START'); for ($i = 0; $i < 10; $i++) { $im = new Imagick($input_file); mem('created $im'); $im->destroy(); mem('destroyed $im'); unset($im); mem('unset $im'); } mem('FINISH'); $ ./im.php Imagick 3.0.1 MEM: 631.02 KiB - START MEM: 631.98 KiB - created $im MEM: 631.98 KiB - destroyed $im MEM: 631.85 KiB - unset $im MEM: 632.38 KiB - created $im MEM: 632.38 KiB - destroyed $im MEM: 632.25 KiB - unset $im MEM: 632.77 KiB - created $im MEM: 632.77 KiB - destroyed $im MEM: 632.65 KiB - unset $im MEM: 633.17 KiB - created $im MEM: 633.17 KiB - destroyed $im MEM: 633.05 KiB - unset $im MEM: 633.57 KiB - created $im MEM: 633.57 KiB - destroyed $im MEM: 633.45 KiB - unset $im MEM: 633.97 KiB - created $im MEM: 633.97 KiB - destroyed $im MEM: 633.84 KiB - unset $im MEM: 634.37 KiB - created $im MEM: 634.37 KiB - destroyed $im MEM: 634.24 KiB - unset $im MEM: 634.77 KiB - created $im MEM: 634.77 KiB - destroyed $im MEM: 634.64 KiB - unset $im MEM: 635.16 KiB - created $im MEM: 635.16 KiB - destroyed $im MEM: 635.04 KiB - unset $im MEM: 635.56 KiB - created $im MEM: 635.56 KiB - destroyed $im MEM: 635.44 KiB - unset $im MEM: 635.43 KiB - FINISH➔ cat ./im2.php #!/usr/bin/php <?php function mem($msg) { printf("MEM: %.2f KiB - %s\n", memory_get_usage() / 1024, $msg); } $input_file = "s.gif"; $ext = new ReflectionExtension('imagick'); $v = Imagick::getVersion(); echo $v['versionString'], "\n"; echo "Imagick ext ", $ext->getVersion(), " PHP ", PHP_VERSION, "\n"; mem('START'); for ($i = 1; $i < 10; $i++) { $im = new Imagick($input_file); mem('created $im'); $im->destroy(); mem('destroyed $im'); unset($im); mem('unset $im'); } mem('FINISH'); ➔ ./im2.php ImageMagick 6.8.7-6 Q16 x86_64 2014-09-14 http://www.imagemagick.org Imagick ext 3.1.2 PHP 5.5.17 MEM: 244.76 KiB - START MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 245.25 KiB - created $im MEM: 245.25 KiB - destroyed $im MEM: 244.95 KiB - unset $im MEM: 244.95 KiB - FINISH ➔ the php version does not seem to matter, so i guess extension version is what matters (fixed the leakage). so here output from same system but different php version: ➔ php53 ./im2.php ImageMagick 6.8.7-6 Q16 x86_64 2014-09-14 http://www.imagemagick.org Imagick ext 3.1.2 PHP 5.3.29 MEM: 632.98 KiB - START MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.94 KiB - created $im MEM: 633.94 KiB - destroyed $im MEM: 633.41 KiB - unset $im MEM: 633.41 KiB - FINISH ➔