2013-08-28 20 views
1

使用卡桑德拉1.1.5,一直纏鬥緩慢寫入性能,JVM GC鎖定,......在我們的日誌中,我們看到這款相當頻繁:減少卡桑德拉1.1.x的堆使用

WARN [ScheduledTasks:1] 2013-08-28 09:28:51,983 GCInspector.java (line 145) Heap is 0.8589157615524839 full. You may need to reduce memtable and/or cache sizes. Cassandra will now flush up to the two largest memtables to free up memory. Adjust flush_largest_memtables_at threshold in cassandra.yaml if you don't want Cassandra to do this automatically 

最大的memTable在我們的系統中(通過JConsole觀察)運行的數據大小高達20,000,000(我假設它是〜20MB,如果是字節)。

如果很重要,這個列家族幾乎有1B行。

flush_largest_memtables_at設置爲.75,但似乎我們幾乎連續發生。這張表的模式是重寫,很少讀取。 (本質上是集羣日誌)

行緩存被禁用,密鑰緩存設置爲40MB。我們有8GB的堆與JVM相關聯(24GB物理)。

堆使用率大多在6.5到7.5GB之間。

有關如何減少堆用量的建議?當然,這不是我們在集羣中有多少數據的因素,是嗎? (我們在該羣集中有可用的磁盤空間)

+1

您是否嘗試調整'flush_largest_memtables_at',如警告消息所示? – Raedwald

回答

3

真正的解決辦法是升級到1.2.x的在布隆過濾器和壓縮元數據已移至離堆:http://www.datastax.com/dev/blog/performance-improvements-in-cassandra-1-2

+0

絕對......考慮到我們有這麼多的數據並且將升級一個9節點集羣,有點令人生畏。我們需要在實驗室中練習幾次。最好想了解如何調整1.1.x,以便內存利用率不會與正在存儲的數據一起運行。 –

1

與1.1.x類似,布隆過濾器(隨着存儲在每個節點中的數據量增長)被保存在堆上。我們的單個ColumnFamily的-Filter.db文件超過1.6GB。

大文章:http://nmmm.nu/bloomfilter.htm

我們已經修改了bloom_filter_fp_chance向上設置在此的ColumnFamily(這應該減少布隆過濾器數據的大小),和正在運行的清理,看看會發生什麼。

0

我們在1.1中發現,降低bloom_filter_fp_chance設置幫助。如果您使用

nodetool cfstats 

它有助於確定您的色譜柱系列的布隆篩選器大小有多大幫助。以讀取時間爲代價考慮的另一件事是增加cassandra.yaml中的index_interval。如果你有很多小行,我會推薦這個。如果你有寬行這可能不是一個好主意。

http://www.datastax.com/docs/1.1/configuration/node_configuration#index-interval

我會建議採取堆轉儲和看重量級人物是什麼,但。