使用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 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
这是堆转储。
分析它并没有导致任何事情,只是因为我看到很多几乎是空的数组和地图,所以存在内存泄漏。
我很欣赏这些想法。
答案 0 :(得分:0)
听起来你正在缓存数据,但你没有使用JNA(Java Native Access)。 JNA允许Cassandra在堆外存储O(n)数据结构(那些随数据集大小增长的数据),包括缓存。 This document介绍了如何设置JNA。定义架构时,每个表/ CF都配置了缓存设置。
答案 1 :(得分:0)
在调用显式gc之后堆是否会掉线?