You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Sebastian Mach (JIRA)" <ji...@apache.org> on 2014/10/07 18:47:34 UTC

[jira] [Created] (THRIFT-2771) Dangling references / Leak when using hbase->mutateRows?

Sebastian Mach created THRIFT-2771:
--------------------------------------

             Summary: Dangling references / Leak when using hbase->mutateRows?
                 Key: THRIFT-2771
                 URL: https://issues.apache.org/jira/browse/THRIFT-2771
             Project: Thrift
          Issue Type: Bug
          Components: PHP - Library
    Affects Versions: 0.9
            Reporter: Sebastian Mach


When setting up our Hbase-Client like ...

{code}
    $socket = new TSocket( OI_HBASE_HOST, OI_HBASE_PORT );
    $socket->setSendTimeout( 30000 ); // Ten seconds (too long for production, but this is just a demo ;)
    $socket->setRecvTimeout( 60000 ); // Twenty seconds
    $this->transport = new TBufferedTransport( $socket );
    $protocol = new TBinaryProtocolAccelerated( $this->transport );
    $this->hbase = new HbaseClient( $protocol );
{code}

... and then using ...

{code}
    $this->hbase->mutateRows("user_crm", $batchMutations, null);
{code}

... multiple times on a longer running task, it seems that a memory leak of some sort is hit.


I tracked the memory-usage-growth to that call; before and after the call, measured with {{memory_get_usage(true)}} or {{memory_get_usage(false)}}, the memory usage is identical, but when re-entering the paths multiple times, the total usage increases and increases.

I tried to explitly unset all variables, also within the function {{mutateRows}}, and invoked garbage collection explicitly with {{gc_collect_cycles();}}. I also tried lowering the maximum allowed memory for PHP to see if this will invoke the GC better, but then ran into "out of memory"-errors.

Within {{Thrift/packages/Hbase/Hbase.php::send_mutateRows}}, {{thrift_protocol_write_binary}} is called as intended.

I also checked https://issues.apache.org/jira/browse/THRIFT-1067, but we use version 0.9.0, where the patch is documented to be applied already.

The only clues I have at the moment:

* Before and after the call to {{mutateRows}}, memory usage is identical
* When I remove the call, there is no "leak", which hints (but surely doesn't prove) that our side is clean.
* Those clues combined with my own instinct, it looks like there's maybe a reference on the implementatory C-side that is dangling or held too long and can't be freed by the GC.


{code}
# thrift --version
Thrift version 0.9.0
{code}




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)