Есть некоторые вещи, которые вы можете попробовать настроить. Сначала убедитесь, что у вас нет кэширования строк в вашем семействе столбцов. Также стоит проверить журнал на наличие ошибок и tpstats, если что-то умерло из-за ошибки, и что-то копируется в очередь. Трассировка стека исключения также может быть значимой, так как на самом деле существуют разные типы OOM, которые могут означать просто настройки ядра.
Если вы просто используете слишком много памяти на узел, то для размера вашего набора данных попробуйте проверить cfstats, вы можете приблизительно определить, сколько места расходуется на фильтры Блума. Поскольку у вас больше строк в CF, это может быть линейно больше и является частью базового минимального объема памяти, который потребуется вашим узлам.
nodetool cfstats | grep Bloom.*Used | awk '{ SUM += $5} END { print SUM " bytes" }'
Поскольку вы не читаете очень часто, вы, вероятно, можете увеличить количество ложных срабатываний на них. Каждый SSTable имеет фильтр Блума, который он использует, чтобы проверить, существует ли в нем строка или нет. Вы можете изменить с помощью cqlsh
ALTER TABLE MyColumnFamily WITH bloom_filter_fp_chance = 0.1;
После этого вызовите обновление этого CF (это будет медленно) для каждого узла
nodetool upgradesstables MyKeyspace MyColumnFamily
Это может привести к тому, что чтение может занять больше времени, поскольку существует 10% -ная (.1) вероятность, что он проверит таблицы SSTable на наличие строк, которых в нем нет, что приведет к дополнительному поиску на диске.
Другой основной приемник памяти, если у вас есть семейства столбцов с большим количеством строк, - это частота выборки индекса. Это может быть изменено для уровня узла в cassandra.yaml
http://www.datastax.com/docs/1.1/configuration/node_configuration#index-interval
Если он настроен на получение дампов кучи в OOM (по-моему, -XX: + HeapDumpOnOutOfMemoryError включен), в каталоге / var / lib / cassandra / data должны быть некоторые дампы кучи. Вы можете открыть их в VisualVM или любом другом инструменте, который вам нравится, чтобы определить, какая часть кучи находится.