Re: Where's my memory going?!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxx
>>>>
>>>>
>>>> "Philip Thompson" <philthathril@xxxxxxxxx> wrote in message
>>>> news:9C0B9C4C-5E64-4519-862B-8A3E1DA4DE4C@xxxxxxxxxxxx
>>>>> 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);
>         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.
> 

First off, my question would be, is your query actually working?  Because I
would imagine that if you were getting results back from the DB, that the amount
of memory being used would increase between step 1 & 2.

Check to make sure that you are getting results.

> Thanks,
> ~Philip
> 
> 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux