Cassandra:java.lang.OutOfMemoryError:Java堆空间

时间:2014-09-04 11:17:05

标签: cassandra cassandra-2.0

我正在使用cassandra 2.0.8并获得此异常

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 个答案:

答案 0 :(得分:3)

联系cassandra / conf / cassandra-env.sh位置

检查当前堆大小 您可以将最多1/2 RAM分配给HEAP

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

如果要更改当前堆大小,请删除注释..

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

答案 1 :(得分:3)

可能你的密钥缓存占用了太多的空间(因为它死了)但似乎不太可能。您可以在开始之前尝试删除KeyCache

/var/lib/cassandra/saved_caches

并设置

key_cache_size_in_mb: 0

在您的cassandra.yaml中作为测试(我不会永久推荐)将其禁用。

您实际上可以通过打开它在yourkit或某个堆分析器中创建的java_pid3460.hprof文件来确定填满堆的最新情况,以确定占用空间的最新情况。可能会发生一些有趣的事情,在13mb左右(堆的大小)死亡时非常奇怪。