【问题标题】:Cassandra eats memory卡桑德拉吃掉记忆
【发布时间】:2016-12-24 04:11:48
【问题描述】:

我有 Cassandra 2.1 和以下属性集:

MAX_HEAP_SIZE="5G"
HEAP_NEWSIZE="800M"
memtable_allocation_type: heap_buffers

top 实用程序显示 cassandra 占用 14.6G 虚拟内存:

KiB Mem:  16433148 total, 16276592 used,   156556 free,    22920 buffers
KiB Swap: 16777212 total,        0 used, 16777212 free.  9295960 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
23120 cassand+  20   0 14.653g 5.475g  29132 S 318.8 34.9  27:07.43 java

当我从 Spark 访问它时,它也会因各种 OutOfMemoryError 异常而死。

如何防止这种“OutOfMemoryErrors”并减少内存使用?

【问题讨论】:

  • 我已将 MAX_HEAP_SIZE 和 Xmx 设置为 600M(开发目的),但启动时仍在使用 4G。

标签: memory cassandra cassandra-2.1


【解决方案1】:

Cassandra 确实会消耗大量内存,但可以控制它,但需要调整 GC [垃圾收集] 设置。

GC 参数包含在 bin/cassandra.in.sh 文件的 JAVA_OPTS 变量中。

您可以在 JAVA_OPTS 中应用这些设置

    -XX:+UseConcMarkSweepGC
  -XX:ParallelCMSThreads=1
  -XX:+CMSIncrementalMode
  -XX:+CMSIncrementalPacing
  -XX:CMSIncrementalDutyCycleMin=0
  -XX:CMSIncrementalDutyCycle=10

或者不指定MAX_HEAP_SIZEHEAP_NEWSIZE这些参数,而是让cassandra'script指定这些参数,因为它会为这些参数分配最佳值。

【讨论】:

  • 感谢您的回答。但是这个选项会调整 GC 参数并且 GC 在堆内存上运行。就我而言,我有 5G 的堆限制,而 cassandra 吃掉了 14g 的虚拟内存。所以我认为这是堆外,无法通过此选项控制。
猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多