Cassandra生成" OutOfMemory"节点启动时出错

时间:2015-07-16 06:15:55

标签: amazon-web-services cassandra

我们正在AWS上运行3节点cassandra集群。我能够启动一个节点,但我无法启动集群中的其他两个节点。 当我尝试启动节点时,我得到一个以下信息列表,直到它最终耗尽堆空间并终止: http://pastebin.com/7gRGWVDV

最后,节点以内存不足错误终止:

ERROR 07:37:41,495 Exception in thread Thread[FileWatchdog,5,main] java.lang.OutOfMemoryError: Java heap space
        at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:300)
        at java.lang.StringCoding.encode(StringCoding.java:344)
        at java.lang.String.getBytes(String.java:916)
        at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
        at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
        at java.io.File.exists(File.java:813)
        at org.apache.log4j.helpers.FileWatchdog.checkAndConfigure(FileWatchdog.java:77)
        at org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:108) 
ERROR 07:37:48,570 Exception in thread Thread[CompactionExecutor:4,1,main] java.lang.OutOfMemoryError: Java heap space
        at org.apache.cassandra.io.util.RandomAccessReader.readBytes(RandomAccessReader.java:347)
        at org.apache.cassandra.utils.ByteBufferUtil.read(ByteBufferUtil.java:392)
        at org.apache.cassandra.utils.ByteBufferUtil.readWithLength(ByteBufferUtil.java:355)
        at org.apache.cassandra.db.ColumnSerializer.deserializeColumnBody(ColumnSerializer.java:124)
        at org.apache.cassandra.db.OnDiskAtom$Serializer.deserializeFromSSTable(OnDiskAtom.java:85)
        at org.apache.cassandra.db.Column$1.computeNext(Column.java:75)
        at org.apache.cassandra.db.Column$1.computeNext(Column.java:64)
        at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
        at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
        at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:153)
        at org.apache.cassandra.db.columniterator.IndexedSliceReader$IndexedBlockFetcher.getNextBlock(IndexedSliceReader.java:434 )

在cassandra-env.sh中,我设置:

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

我能够启动cassandra并正常运行直到几天,然后我们运行了一个数据迁移任务,将数据从mysql移动到cassandra。在迁移期间,我记得我们已经从mysql到cassandra移动了大约4000万行。因此,我们耗尽了硬盘空间,因此我们增加了更多的磁盘空间,并将我们的aws实例从m3大增加到m3 xlarge。 但现在我无法启动节点。 正如在其他SO答案中所建议的,我删除了saved_cache目录并尝试重新启动节点。但这个建议对我们没有用。

我正在使用cassandra版本2.0.14

任何指针都会有所帮助!

1 个答案:

答案 0 :(得分:0)

我见过几次同样的事情。基本上,由于压实,Cassandra在大型插入过程中消耗了大量的堆。尝试从较大的堆开始,并在导入完成后再次降低它