|
Cassandra и память
|
|||
---|---|---|---|
#18+
Изучаю cassandry. Версия 1.1.2 Библиотеки для касандры взял astynax Java 6. Windows Вообщем есть простейший код создающий объект вида ключ/значение общий объем каждого объекта около 2кб. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В цикле создаю в базе по 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 - один фиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2012, 20:38 |
|
Cassandra и память
|
|||
---|---|---|---|
#18+
Добро пожаловать в клуб :) Во первых - память для работы кассандры минимум 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 - это размер строки которая будет сжиматься в памяти, тоже надо внимательно смотреть. При интенсивной записи должен быть побольше, но если мало памяти все будет плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2013, 19:56 |
|
|
start [/forum/topic.php?fid=48&msg=38244433&tid=1856950]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 143ms |
0 / 0 |