Memory cassandra连接中的大量内存使用
我正在使用和单个集群和会话对象对cassandra进行许多异步插入。我还使用准备好的语句,并在所有操作中重用它们 最近我注意到,在运行几分钟后,应用程序变得非常慢,因为它开始在一台内存为32GB的机器上使用虚拟内存。 我跟踪了内存使用情况,发现cassandra连接正在使用这些内存 为了进行测试,我一直运行到内存为1GB,并注意到以下几点: 卡桑德拉943 MB。连接Memory cassandra连接中的大量内存使用,memory,cassandra,prepared-statement,Memory,Cassandra,Prepared Statement,我正在使用和单个集群和会话对象对cassandra进行许多异步插入。我还使用准备好的语句,并在所有操作中重用它们 最近我注意到,在运行几分钟后,应用程序变得非常慢,因为它开始在一台内存为32GB的机器上使用虚拟内存。 我跟踪了内存使用情况,发现cassandra连接正在使用这些内存 为了进行测试,我一直运行到内存为1GB,并注意到以下几点: 卡桑德拉943 MB。连接 卡桑德拉890 MB。操作状态 请求执行中802 MB RequestHandler中738 MB 我还注意到Concurren
卡桑德拉890 MB。操作状态
请求执行中802 MB
RequestHandler中738 MB
我还注意到ConcurrentQueue中有大约934MB的内存,它的根位于Cassandra.Connection.\u writeQueue 这是否意味着应用程序排队写入的速度快于节点可以处理的速度? 所有逻辑都是使用带有准备语句的异步等待执行的 我不知道我怎么能做不同的事情。这是卡桑德拉的基本用法
这是张贴在网站上的。然而,看来这可能是一个更好的位置。坦白地说,我不确定。简短的回答是,是的,这听起来像是您在集群中抛出写操作的速度快于它能够确认它们,因此写队列正在备份。听起来您已经在遵循最佳实践,如使用单个会话对象、准备好的语句等。但是,您可以尝试一些事情,看看它是否有助于解决问题:
会话
对象时,请查看自定义池选项
(即使用。WithPoolgOptions(您的自定义池选项)
在群集生成器上。增加每个节点的连接数或最大正在进行的请求数可能会有所帮助。但请记住,对于异步请求必须进行的所有簿记(即任务等),您仍将使用更多内存。请阅读更多有关system.log
)。您还可以从(其中,tablestats
和tablehistograms
命令可能有用)希望这能有所帮助。谢谢。如果一切都像你想象的那样神奇地工作,那当然很好,但这毕竟是真实的世界(