Re: Where's my memory going?!
| From: | Jim Lucas | Date: | Tue, 29 Sep 2009 21:38:50 +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-298406@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
>>>> FЋØ
>>>> £Íå¾�-‡òß›Ó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);
> 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
>
>