2014-09-04 140 views
2

我使用卡桑德拉2.0.8和獲得此異常卡桑德拉:java.lang.OutOfMemoryError:Java堆空間

INFO 16:44:50,132 Initializing system.batchlog 
INFO 16:44:50,138 Initializing system.sstable_activity 
INFO 16:44:50,142 Opening /var/lib/cassandra/data/system/sstable_activity/system-sstable_activity-jb-10 (826 bytes) 
INFO 16:44:50,142 Opening /var/lib/cassandra/data/system/sstable_activity/system-sstable_activity-jb-9 (827 bytes) 
INFO 16:44:50,142 Opening /var/lib/cassandra/data/system/sstable_activity/system-sstable_activity-jb-11 (825 bytes) 
INFO 16:44:50,150 reading saved cache /var/lib/cassandra/saved_caches/system-sstable_activity-KeyCache-b.db 
java.lang.OutOfMemoryError: Java heap space 
Dumping heap to java_pid3460.hprof ... 
Heap dump file created [13378724 bytes in 0.071 secs] 
ERROR 16:44:50,333 Exception encountered during startup 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.ArrayList.<init>(ArrayList.java:144) 
    at org.apache.cassandra.db.RowIndexEntry$Serializer.deserialize(RowIndexEntry.java:120) 
    at org.apache.cassandra.service.CacheService$KeyCacheSerializer.deserialize(CacheService.java:365) 
    at org.apache.cassandra.cache.AutoSavingCache.loadSaved(AutoSavingCache.java:119) 
    at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:262) 
    at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:421) 
    at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:392) 
    at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:309) 
    at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:266) 
    at org.apache.cassandra.db.Keyspace.open(Keyspace.java:110) 
    at org.apache.cassandra.db.Keyspace.open(Keyspace.java:88) 
    at org.apache.cassandra.db.SystemKeyspace.checkHealth(SystemKeyspace.java:536) 
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:261) 
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:496) 
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:585) 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.ArrayList.<init>(ArrayList.java:144) 
    at org.apache.cassandra.db.RowIndexEntry$Serializer.deserialize(RowIndexEntry.java:120) 
    at org.apache.cassandra.service.CacheService$KeyCacheSerializer.deserialize(CacheService.java:365) 
    at org.apache.cassandra.cache.AutoSavingCache.loadSaved(AutoSavingCache.java:119) 
    at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:262) 
    at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:421) 
    at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:392) 
    at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:309) 
    at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:266) 
    at org.apache.cassandra.db.Keyspace.open(Keyspace.java:110) 
    at org.apache.cassandra.db.Keyspace.open(Keyspace.java:88) 
    at org.apache.cassandra.db.SystemKeyspace.checkHealth(SystemKeyspace.java:536) 
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:261) 
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:496) 
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:585) 
Exception encountered during startup: Java heap space 

誰能告訴我的原因及解決方法:

回答

2

伸出來卡桑德拉/的conf/cassandra-env.sh位置

退房當前堆大小 您可以在最大分配的1/2 RAM的堆

#MAX_HEAP_SIZE="4G" 
#HEAP_NEWSIZE="800M" 

如果你正在改變當前的堆大小,然後刪除評論..

MAX_HEAP_SIZE="4G" 
HEAP_NEWSIZE="800M" 
+0

確定我會檢查。我檢查'commitlogs'的firectory,看到大約有250MB的文件大小,這也是一個原因嗎? – manish 2014-09-04 11:32:14

+0

我試着用'MAX_HEAP_SIZE = 「600MB」 HEAP_NEWSIZE = 「300MB」'卻得到了'無效的初始堆大小:-Xms600MB 錯誤:無法創建Java虛擬機。 錯誤:發生了致命異常。程序將會退出。 ' – manish 2014-09-04 11:39:13

+0

你的機器有1GB RAM?你可以指定你的機器MAX_HEAP_SIZE的RAM 1/2,它必須是HEAP_NEWSIZE =「600M」(只含有M不是MB).. – 2014-09-04 11:41:59

3

其可能的密鑰緩存佔用太多的空間(因爲多數民衆贊成在它死了),但它似乎不太可能。你可以試着

/var/lib/cassandra/saved_caches 

之前刪除您KeyCache並在cassandra.yaml作爲測試集

key_cache_size_in_mb: 0 

(我不會永久推薦此)有它禁用。

實際上,你可以決定什麼方法是打開java_pid3460.hprof文件,它填補了你的堆在yourkit或一些堆分析器創建,以確定什麼佔用的空間。可能會有一些有趣的事情發生,非常奇怪在13mb左右(堆的大小)死亡。

-1

刪除所有日誌文件中usr/local/var/lib/cassandra/commitlog/並重新啓動卡桑德拉。

+0

這將如何解決問題?另外,它是不是會在某種情況下讓卡桑德拉崩潰? – dezso 2016-06-22 09:15:52