Edit report at http://bugs.php.net/bug.php?id=51523&edit=1
ID: 51523
User updated by: evilzluk at gmail dot com
Reported by: evilzluk at gmail dot com
Summary: Memory leak on fread()
Status: Open
Type: Bug
Package: Performance problem
Operating System: Linux
PHP Version: Irrelevant
New Comment:
Description:
------------
The problem is the fread() uses a normal amount of a memory. But there
are too many unallocated anonymous memory pages.
So if the file size >2G the script may cause eating up to 2G of RAM. But
the script's runtime memory is 5M.
The problem is occured even if:
$fp = fopen($file, "rb");
while(!feof($fp))
fread($fp, 1024);
fclose($fp);
After that the memory isn't released so we have a garbadge in the
memory.
Test script:
---------------
<?php
$file = "A.very.big.file.avi";
ob_start();
$fp = fopen($file, "rb");
if ($fp)
{
while(!feof($fp))
{
echo(fread($fp, 1024));
if (ob_get_length())
{
ob_flush();
flush();
ob_end_flush();
}
}
fclose($fp);
}
@ob_flush();
@flush();
@ob_end_flush();
@ob_end_clean();
?>
Expected result:
----------------
The total amount of a memory usage should be at least <php script
runtime memory usage> + 1024 (+ some buffer (up to 8192)). But not
almost all the physical memory (0...unlimited)
Previous Comments:
------------------------------------------------------------------------
[2010-04-10 01:06:50] evilzluk at gmail dot com
Description:
------------
The problem is the fread() uses a normal amount of a memory. But there
are too many unallocated anonymous memory pages.
So if the file size >2G the script may cause eating up to 2G of RAM. But
the script's runtime memory is 5M.
The problem is occured even if:
$fp = fopen($file, "rb");
while(!feof($fp))
fread($fp, 1024);
fclose($fp);
After that the memory isn't released so we have a garbadge in the
memory.
Test script:
---------------
<?php
$file = "A.very.big.file.avi";
ob_start();
$fp = fopen($file, "wb");
if ($fp)
{
while(!feof($fp))
{
echo(fread($fp, 1024));
if (ob_get_length())
{
ob_flush();
flush();
ob_end_flush();
}
}
fclose($fp);
@ob_flush();
@flush();
@ob_end_flush();
@ob_end_clean();
}
?>
Expected result:
----------------
The total amount of a memory usage should be at least <php script
runtime memory usage> + 1024 (+ some buffer (up to 8192)). But not
almost all the physical memory (0...unlimited)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51523&edit=1