2014-09-04 138 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