powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Cassandra и память
2 сообщений из 2, страница 1 из 1
Cassandra и память
    #37882836
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучаю cassandry. Версия 1.1.2
Библиотеки для касандры взял astynax
Java 6.
Windows


Вообщем есть простейший код создающий объект вида ключ/значение
общий объем каждого объекта около 2кб.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		try {
			for(int c = 0; c<=100000; c++){
				m.withRow(CF_USER_INFO, "a"+c)
				  .putColumn("s", c + ":" + s );
				if(c%1000==0){ m.execute(); };				
			}
			m.execute();			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}




В цикле создаю в базе по 10, 20, 100 тыщ объектов. Тестирую.
Работает очень быстро. Просто пипец летает. SQL субд рвет ака роко сифреди девушку.

Но есть одна проблема. Не очищается память. Память используется именно движком кассандры. После каждого прогона она вырастает и назад не освобождается. Проверял долго.
Что на 10 что на 100 тыщах одна и таже ситуация.
Вижу по диспечеру процессов.Думал дело в интервалах работы сборщика, но на ночь оставлял, приходил, а картина та же. с какой памятью ее оставил с такой же она была и утром.
Почему он оставляет память занятой ведь совершенно точно что даныне объекты на диск уже сброшены и еще ни разу на чтение не запрашивались?

Знаю что касанадра сперва накапливает объекты в памяти, а затем пишет их большой пачкой в коммит лог и только после этого в саму базу. но интервалы такого поведения в настройках стоят на 10 секундах. Да, есть способ изменить алгоритм работы с коммитлогом и заставить его кидать на диск данные без задержки но и это почему то не спасает от переполнения памяти и к тому же идет потеря скорости работы.

вот конкретно пример для 10 тыщ объектов:
- касандра тока стартовала - занимает 80М в памяти
- запустил прогу с добавлением 10 тыщ объектов - выросло до 148М
- закрыл приложение. у касандры все равно 148М.
- снова запустил прогу и погнал скрипт. касандра выросла до 250M. причем я скрипт не менял, а значит там не новые объекты создавались а апдейтились уже сущесвующие(там так работает).
- снова запустил - опять теже самые объекты но память выросла еще до 340М.
- и т.д.
- растет до максимума и рано или поздно падает, причем с разными ошибками, то Map failed по причине out of memory, то трифтовый сервис скажет read 0 байт и тоже отшибет соединение.


- если сразу зафигачить мллион объектов то Map failed практически гарантировано.



Что не так делаю? может что-то нужно закрывать после execute? хотя вроде в доках про это ничего нет.
Что можно еще настроить в касандре?
Или ее ненадежность это фича а не бага?

PS пробовал как на голой касандре так и на касандре в составе DataStax - один фиг.
...
Рейтинг: 0 / 0
Cassandra и память
    #38244433
baike2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добро пожаловать в клуб :)

Во первых - память для работы кассандры минимум 8Гб, с меньшим объемом можно не парится даже. Я настраивал для 4Гб, что бы она хоть как-то работала. Настраивал не под винду, а под CentOS.

К памяти она очень требовательна, поэтому нужно очень внимательно читать документацию.

в приложении два файла с настройками для 4Gb - они не оптимальны, но позволяют работать.

Итак
cassandra-env.sh
MAX_HEAP_SIZE="2G" - половина от оперативки
HEAP_NEWSIZE="500M" - 0.25 от оперативной памяти

это две основные настройки для JAVA VM

для самой кассандры - cassandra.yaml

Внимательно читать комментарии и рекомендации в файле.

key_cache_size_in_mb: - оставил по умолчанию, так как надо все таки хранить кэш ключей

row_cache_size_in_mb - это отключить, если большая строка и не влезет в память (я так понял, что может понадобится непрерывный участок, хотя не очень понимаю зачем) OOM гарантирован. Проходил на себе.

commitlog_segment_size_in_mb: 16 - я уменьшил с 32 до 16 для 4Gb - какой-то совет был в интернете.

flush_largest_memtables_at: 1.0 - это отключил
reduce_cache_sizes_at: 1.0 - это отключить тоже
reduce_cache_capacity_to: 1.0
Это что бы кассандра постоянно сбрасывала memtables и освобождала память

memtable_total_space_in_mb: 600 - это 1/3 от выделенной heap для java vm (у меня было 2 GB)

memtable_flush_queue_size: 4 - вот это зависит от индексов.

in_memory_compaction_limit_in_mb: 128 - это размер строки которая будет сжиматься в памяти, тоже надо внимательно смотреть. При интенсивной записи должен быть побольше, но если мало памяти все будет плохо.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Cassandra и память
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]