Cassandra Python驱动程序错误(创建会话时内存泄漏)

时间:2015-02-01 11:54:35

标签: python-2.7 cassandra

我正在将原始帖子更改为内存泄漏,因为我发现cassandra python驱动程序不会从内存中释放会话。在重型插入过程中,它占用了所有内存(因此崩溃的cassandra没有足够的空间用于GC)。

这是之前提出的,但我也看到了最新驱动程序中的问题。

https://github.com/datastax/python-driver/pull/131

     In [2]: cassandra.__version__
     Out[2]: '2.1.4'

class SimpleClient(object):
session = None

def connect(self, nodes):
    cluster = Cluster(nodes)
    metadata = cluster.metadata
    self.session = cluster.connect()
    logging.info('Connected to cluster: ' + metadata.cluster_name)
    for host in metadata.all_hosts():
        logging.info('Datacenter: %s; Host: %s; Rack: %s', host.datacenter, host.address, host.rack)
        print ("Datacenter: %s; Host: %s; Rack: %s"%(host.datacenter, host.address, host.rack))

def close(self):
    self.session.cluster.shutdown()
    logging.info('Connection closed.')

def main():
    logging.basicConfig()
    client = SimpleClient()
    client.connect(['127.0.0.1'])
    client.close()

if __name__ == "__main__":
     count = 0
     while count != 1:
           main()
          time.sleep(1)

如果有人找到了解决方案,请分享。

2 个答案:

答案 0 :(得分:1)

我认为GC非常有可能。根据您插入的数据量(以及速度),您可能会在C *端造成相当长的暂停。 python驱动程序保持与C *数据库的持续连接,它偶尔会ping集群状态信息。您看到的错误是此连接无法实际接收数据。

您应该能够在Cassandra日志中看到每个GC及其持续时间的记录。

答案 1 :(得分:0)

存在一个问题,即注册关闭挂钩会保留群集引用。这在驱动程序版本3.4.0中得到解决。

JIRA

PR