Кассандра ест память

У меня 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

Он также умирает с различными исключениями OutOfMemoryError, когда я обращаюсь к нему из Spark.

Как я могу предотвратить эту "OutOfMemoryErrors" и уменьшить использование памяти?


person Mikhail Tsaplin    schedule 23.12.2016    source источник


Ответы (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_SIZE и HEAP_NEWSIZE эти параметры, пусть cassandra'script указывает эти параметры, потому что он назначит лучшие значения для этих параметров.

person Akash Sethi    schedule 23.12.2016
comment
Спасибо за ваш ответ. Но эта опция настраивает параметры GC, а GC работает с динамической памятью. В моем случае у меня ограничение по куче 5G, а cassandra съедает 14g виртуальной памяти. Поэтому я предполагаю, что это не куча, которую нельзя контролировать с помощью этих параметров. - person Mikhail Tsaplin; 12.01.2017