Re: Where's my memory going?!

From: Date: Tue, 29 Sep 2009 20:07:09 +0000
Subject: Re: Where's my memory going?!
References: 1 2 3 4 5  Groups: php.general 
Request: Send a blank email to php-general+get-298403@lists.php.net to get a copy of this message
Philip Thompson wrote:
On Sep 28, 2009, at 4:40 PM, jeff brown wrote:
Yes, that's the best way to clean up after yourself. And you really should use that on anything you have sitting around daemon like. Jeff Philip Thompson wrote:
On Sep 28, 2009, at 4:27 PM, Ralph Deffke wrote:
well this sound clearly to me like you are not freeing resultsets you are not going to use anymore. In long scripts you have to take care of this. on short scripts you can be a bit weak on that, because the resultsets are closed and freed on script ending. assumed u r using MySQL are u using mysql_free_result($result) goog luck ralph_deffke@yahoo.de "Philip Thompson" <philthathril@gmail.com> wrote in message news:9C0B9C4C-5E64-4519-862B-8A3E1DA4DE4C@gmail.com...
Hi all. I have a script that opens a socket, creates a persistent mysql connection, and loops to receive data. When the amount of specified data has been received, it calls a class which processes the data and inserts it into the database. Each iteration, I unset/destruct that class I call. However, the script keeps going up in memory and eventually runs out, causing a fatal error. Any thoughts on where to start to see where I'm losing my memory? Thanks in advance, ~Philip
I am not using mysql_free_result(). Is that highly recommended by all? Thanks, ~Philip
I took your suggestions and made sure to clean up after myself. I'm running into something that *appears* to be a bug with mysql_free_result(). Here's a snippet of my db class. <?php class db {
    function fetch ($sql, $assoc=false)
    {
        echo "\nMemory usage before query: " . number_format (memory_get_usage ()) . "\n";
        $resultSet = $this->query($sql);
        echo "Memory usage after  query: " . number_format (memory_get_usage ()) . "\n";
        if (!$assoc) { $result = $this->fetch_row($resultSet); }
        else {
            $result = $this->fetch_array($resultSet);
            echo "Memory usage after  fetch: " . number_format (memory_get_usage ()) . "\n";
        }
/*
        $this->freeResult($resultSet);
*/
          mysql_free_result($resultSet);
        echo "Memory usage after   free: " . number_format (memory_get_usage ()) . "\n";
        return $result;
    }
    function freeResult ($result)
    {
        if (is_resource ($result)) {
            if (!mysql_free_result ($result)) { echo "Memory could not be freed\n"; }
        }
        unset ($result); // For good measure
    }
    function fetch_row ($set) {
        return mysql_fetch_row ($set);
    }
    function fetch_array ($set) {
        return mysql_fetch_array ($set, MYSQL_ASSOC);
    }
} // I seem to be losing memory when I call this $db->fetch($sql); ?> The result I get with this is... Memory usage before query: 6,406,548 Memory usage after query: 6,406,548 Memory usage after fetch: 6,406,548 Memory usage after free: 6,406,572 As you may notice, the memory actually goes UP after the *freeing* of memory. Why is this happening?! What have I done wrong? Is this a bug? Any thoughts would be appreciated. Thanks, ~Philip
try the above... jeff

« previous php.general (#298403) next »