首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra java进程使用的内存超过其分配的最大堆大小(Xmx)

Cassandra java进程使用的内存超过其分配的最大堆大小(Xmx)
EN

Stack Overflow用户
提问于 2021-06-08 17:31:22
回答 1查看 132关注 0票数 1

我们有我们的cassandra集群,它在unix主机集(18)中运行Apache Cassandra 3.11.4。这些主机中的每一个都有96G的内存,我们已经将堆大小配置为-Xms=64G -Xmx=64G,但主机上的top命令(top -M)显示实际内存利用率平均约为85G,即远远高于分配的堆(64G)。

内存使用的趋势如下,在启动cassandra守护进程期间,顶级-M显示进程已经占用了大约75G,(75G-64G)=比分配的堆大小多9G,并且这种内存利用率随着时间的推移而增加,仅在3-4小时内就达到了最大85G,并在整个时间内保持在该阶段,而堆利用率(~40-50%)是正常的,GS活动是正常的,小GC照常开始。

已确认每个主机上所有keyspace使用的总堆外内存都在2G以下。

除了分配的堆之外,我们无法跟踪正在消耗RAM的其他内容。

EN

回答 1

Stack Overflow用户

发布于 2021-06-08 18:57:01

除了堆内存,Cassandra还使用堆外内存,例如用于保存压缩元数据、布隆过滤器和其他一些东西。来自文档(12):

压缩元数据存储在堆外,并随磁盘上的数据进行扩展。这通常需要磁盘上每3GB数据1-3 3GB的堆外RAM,尽管确切的使用情况因chunk_length_in_kb和压缩率而异。布隆过滤器存储在RAM中,但存储在堆外,因此操作员在选择最大堆大小时不应考虑布隆过滤器。

例如,您可以监控堆&离堆内存使用情况using the JMX。(我见过这样的设置,其中bloom filter一项就占用了大约40 of的RAM,但它在很大程度上依赖于唯一分区键的数量)

通常不推荐使用太大的堆,因为它们可以使用长时间的暂停,等等。当然,这取决于工作负载,但您可以尝试31 of或更低(或仅使用默认设置)。此外,您需要为Linux文件缓冲区留出内存,以便它可以缓存经常使用的文件。这就是为什么在默认情况下,Cassandra只为堆分配1/4的系统内存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67885016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档