Java 卡桑德拉2.1.0内存不足

Java 卡桑德拉2.1.0内存不足,java,cassandra,cassandra-2.0,Java,Cassandra,Cassandra 2.0,我们最近开始与卡桑德拉合作,并建立了一个 4个数据中心(DC1、DC2、DC3、DC4),(每个数据中心群集在虚拟机上运行3个节点)、内存、memtables等。配置以其默认值运行 我们在每个节点上运行一个cron作业(大约每周1个,交错),以执行修复作业 无论如何,我们有4个节点同时死亡(2个死于DC1,2个死于DC2两个DC1/DC2都在美国,另外2个在欧盟)所有内存不足时,所有4个节点上的堆栈看起来都是相同的..(完整堆栈见下文) 节点在周末崩溃,当时应该没有客户端活动击中集群(因为这是一

我们最近开始与卡桑德拉合作,并建立了一个

4个数据中心(DC1、DC2、DC3、DC4),(每个数据中心群集在虚拟机上运行3个节点)、内存、memtables等。配置以其默认值运行

我们在每个节点上运行一个cron作业(大约每周1个,交错),以执行修复作业

无论如何,我们有4个节点同时死亡(2个死于DC1,2个死于DC2两个DC1/DC2都在美国,另外2个在欧盟)所有内存不足时,所有4个节点上的堆栈看起来都是相同的..(完整堆栈见下文)

节点在周末崩溃,当时应该没有客户端活动击中集群(因为这是一个测试集群),查看日志显示只有修复/压缩活动

每个节点都在4gb机箱上运行,堆设置为1gb。 此时集群的实际数据负载可以忽略不计,我们有3个键空间(所有数据中心的RF=2),其中每个键空间的大小约为2-12kb。。(12kb的实际上是我们在周五刚刚安装的OpsCenter。OpsCenter的安装会导致这种情况吗?)

我怀疑到目前为止,我们还没有将超过2000亿的交易推送到系统中

你有没有想过是什么导致了这次OOM? 我简单地看了一眼hprof垃圾场,但没有什么特别突出

我们已经做了更多的挖掘,并确定 nodetool修复操作运行了12个多小时(导致另一个节点同时运行nodetool修复,我相信同时运行的两个修复导致节点OOM)

我还可以通过运行1节点工具修复作业以及节点工具压缩键空间操作,按需复制OOM错误

我不知道为什么需要12个多小时来运行修复

我们还确定,我们的一些数据目录/keyspace/table目录有超过7500多个文件,这可能导致该过程永远运行

同时阅读2.1文档,我们已经开始使用nodetool repair-par-inc 进程目前仍在运行

一些想法: 我们认为,也许对我们来说,最好的策略是:

  • 节点x上每个键空间的nodetool compact

  • 诺德托尔公司

  • 然后继续运行“此脚本”,循环抛出所有数据中心中的所有节点 (可能在交换节点之间等待几个小时)。 这听起来合理吗?这将至少确保一次仅运行一个修复作业,并且不会同时运行主要压实作业

    堆栈跟踪:
    WARN[SharedPool-Worker-13]2014-12-07 18:32:14961 AbstractTracingawareeExecutorService.java:167-线程[SharedPool-Worker-13,5,main]上的未捕获异常:{}
    java.lang.OutOfMemoryError:java堆空间
    在org.apache.cassandra.io.compress.CompressedRandomAccessReader.(CompressedRandomAccessReader.java:79)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:43)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.io.util.compressedoolingsegmentedfile.createReader(compressedoolingsegmentedfile.java:59)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.io.util.pooligsegmentedfile.getSegment(pooligsegmentedfile.java:40)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.io.sstable.SSTableReader.getFileDataInput(SSTableReader.java:1694)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.columniterator.IndexedSliceReader.setToRowStart(IndexedSliceReader.java:107)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.columniterator.IndexedSliceReader.(IndexedSliceReader.java:83)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.columniterator.SSTableSliceIterator.createReader(SSTableSliceIterator.java:65)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.columniterator.SSTableSliceIterator.(SSTableSliceIterator.java:42)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:179)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:62)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:284)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:59)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1872)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1680)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:345)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:59)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.db.readverbdhandler.doVerb(readverbdhandler.java:47)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:62)~[apache-cassandra-2.1.0.jar:2.1.0]
    在java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)~[na:1.8.011]
    在org.apache.cassandra.concurrent.abstractracingawareexecutorservice$FutureTask.run(abstractracingawareexecutorservice.java:163)~[apache-cassandra-2.1.0.jar:2.1.0]
    在org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:103)[apache-cassandra-2.1.0.jar:2.1.0]
    
    我心中没有任何具体问题,但我建议在深入了解这一点之前,先了解最新的2.1版本。
    WARN  [SharedPool-Worker-13] 2014-12-07 18:32:14,961 AbstractTracingAwareExecutorService.java:167 - Uncaught exception on thread Thread[SharedPool-Worker-13,5,main]: {}
    java.lang.OutOfMemoryError: Java heap space
        at org.apache.cassandra.io.compress.CompressedRandomAccessReader.<init>(CompressedRandomAccessReader.java:79) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:43) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.io.util.CompressedPoolingSegmentedFile.createReader(CompressedPoolingSegmentedFile.java:59) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.io.util.PoolingSegmentedFile.getSegment(PoolingSegmentedFile.java:40) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.io.sstable.SSTableReader.getFileDataInput(SSTableReader.java:1694) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.columniterator.IndexedSliceReader.setToRowStart(IndexedSliceReader.java:107) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.columniterator.IndexedSliceReader.<init>(IndexedSliceReader.java:83) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.columniterator.SSTableSliceIterator.createReader(SSTableSliceIterator.java:65) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.columniterator.SSTableSliceIterator.<init>(SSTableSliceIterator.java:42) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:179) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:62) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:284) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:59) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1872) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1680) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:345) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:59) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.db.ReadVerbHandler.doVerb(ReadVerbHandler.java:47) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:62) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_11]
        at org.apache.cassandra.concurrent.AbstractTracingAwareExecutorService$FutureTask.run(AbstractTracingAwareExecutorService.java:163) ~[apache-cassandra-2.1.0.jar:2.1.0]
        at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:103) [apache-cassandra-2.1.0.jar:2.1.0]