Java Cassandra 1.2.3堆随着行数的增加而增加
随着密钥数量的增加,使用10GB RAM运行Cassandra 1.2.3会导致堆使用率不断增加。现在大约是8.3G,节点承受堆压力,导致超时 cfstats输出:Java Cassandra 1.2.3堆随着行数的增加而增加,java,cassandra,heap,Java,Cassandra,Heap,随着密钥数量的增加,使用10GB RAM运行Cassandra 1.2.3会导致堆使用率不断增加。现在大约是8.3G,节点承受堆压力,导致超时 cfstats输出: Keyspace: profiles Read Count: 33775531 Read Latency: 11.160335890411316 ms. Write Count: 146030154 Write Latency: 0.03436538754180866 ms. Pending
Keyspace: profiles
Read Count: 33775531
Read Latency: 11.160335890411316 ms.
Write Count: 146030154
Write Latency: 0.03436538754180866 ms.
Pending Tasks: 0
Column Family: profiles
SSTable count: 12
Space used (live): 161353987766
Space used (total): 161604490499
Number of Keys (estimate): 162628352
Memtable Columns Count: 69256
Memtable Data Size: 58138189
Memtable Switch Count: 6844
Read Count: 33775532
Read Latency: 13.964 ms.
Write Count: 146030157
Write Latency: 0.032 ms.
Pending Tasks: 0
Bloom Filter False Positives: 2498002
Bloom Filter False Ratio: 0.31157
Bloom Filter Space Used: 110145928
Compacted row minimum size: 30
Compacted row maximum size: 73457
Compacted row mean size: 3508
这里是堆转储
分析它并没有导致任何结果,只是假设存在内存泄漏,因为我看到了很多几乎为空的数组和映射
我很感谢你的想法。听起来你在缓存数据,但你没有使用JNA(Java原生访问)。JNA允许Cassandra在堆外存储O(n)个数据结构(随着数据集大小而增长的数据结构),包括缓存。描述如何设置JNA。定义架构时,缓存设置是按照表/CF进行配置的。调用显式gc后堆是否会下降?这不是答案。明智地选择合适的答案和更合适的注释。为了得到答案,我们必须更加理解这个问题,最初的作者提到,堆随着行的增加而增加。对我来说,这似乎是显而易见的,因为memtable太大了,但是当memtable刷新到sstable时,堆应该被回收。GC将收回它。有一种可能性,堆在那里,但没有得到gced,它可能会被回收。如果堆持续时间较长,则不应担心其他问题。Prateek,你不应该劝阻人们不要问问题来获得正确答案。我希望这能澄清问题。
Prateek,你不应该劝阻人们不提问以获得正确答案。
我不是劝阻你提问,而是指出提问应该在评论中完成。这正是我们在SO中有注释选项的原因。当你想得到一个问题的澄清时,你应该添加一条评论并要求澄清,OP会编辑他的帖子以使其更容易理解。