【问题标题】:Why is Cassandra taking this much memory, despite -Xmx heap option?尽管 -Xmx 堆选项,为什么 Cassandra 占用这么多内存?
【发布时间】:2019-05-25 00:39:41
【问题描述】:

我在内存有限的服务器上运行 Cassandra(一个 Java 进程)。我编辑 Cassandra 的配置 (config/jvm.options) 以将这些参数传递给 Java 虚拟机,以限制堆大小。

-Xms180M -Xmx180M

我可以在ps ax | grep java 的输出中看到它们,它显示:

[...] /usr/lib/jvm/java-8-openjdk-amd64/bin/java [...] 
   -Xms180M -Xmx180M [...] org.apache.cassandra.service.CassandraDaemon

但它似乎使用了超过 180MB 的空间,并且另一个服务器进程不断消失。我猜由于内存有限,内核正在杀死另一个进程。

这是top中的一块屏幕:

KiB Mem :  1009128 total,    87072 free,   643488 used,   278568 buff/cach
KiB Swap:        0 total,        0 free,        0 used.   222228 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                 
20410 cassand+  20   0 2048132 433828   8456 S  0.3 43.0  41:25.22 java          

RES 433828 不是意味着 Cassandra 使用了 433 MB 的 RAM 吗?在我将 Java 堆限制为 180 MB 之后,这似乎可行吗?如果堆被限制为 180 MB,那么其他 433-180 = 253MB 是什么?我也可以限制吗?

【问题讨论】:

  • "my server, which has limited memory" - 假设这是一个与工作相关的问题,你已经花在这上面的时间的货币价值远远超过额外内存的成本。当服务器有几十 GB 的内存时,担心几百 MB 是不划算的。
  • 是的,这是杰夫·贝佐斯富有的原因之一。 :) 这更像是一个个人项目,尽管这可能会改变。我可能会升级我的 Digital Ocean 服务器,但我想先了解问题所在,所以它不会简单地用完额外的 RAM 并让我留在原地。

标签: java cassandra heap-memory


【解决方案1】:

Cassandra 有一个堆上部分(由 -Xmx 控制)和一个堆外部分。大多数堆外数据结构通常随数据大小而扩展——诸如分区索引、布隆过滤器和压缩块数据之类的东西存储在直接内存区域中,并随着磁盘使用量的增加而增加。

您可以对这些进行一些调整,但它们不太明显并且需要权衡性能。例如,将bloom_filter_fp_chance0.01 提升到0.1 将使用更少的内存,但您可能会在读取路径上读取额外的sstables。

【讨论】:

  • 好的。也许这是一个单独的问题,但是有没有办法将这个堆外部分限制为一定的内存大小?如果不是,我很困惑,因为大型数据库可能会导致服务器崩溃(导致 OOM 终止)。我宁愿让我的系统慢下来,或者记录警告说它需要更多的 RAM,而不是杀死随机进程。
  • 不是,不是。你可以设置XX:MaxDirectMemorySize,但这只会让你在JVM级别而不是服务器级别OOM。 JIRA 要求一种方法来限制它是值得的,但现实情况是数据结构被设置为堆外,所以如果你有太多的数据,我们不能让数据结构堆外,我们仍然必须使数据库崩溃。
  • 您说“随数据大小缩放”。我假设这意味着节点上的数据大小,而不是整个数据库的数据大小。那么是否准确地说管理我的服务器上的 RAM 的方法是简单地观察 Cassandra 使用了多少 RAM,或者 1. 选择具有足够 RAM 的服务器来为其提供空间,或者 2. 创建更多节点来拆分跨更多服务器的数据并(希望)减少单个节点的 RAM 需求?
  • 两者都同意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多