0

我使用卡桑德拉2.0.9,其中我得到了一些意外關機說OutOfMemoryError,雖然輕微壓實運行背景我得到這個錯誤。在此之前,我對墓碑有一些警告。但我已經將gc_grace設置爲只有一天。由於外存錯誤導致的卡桑德拉意外關機

WARN [ReadStage:95] 2016-03-09 06:10:31,548 SliceQueryFilter.java (line 225) Read 1 live and 21072 tombstoned cells in mykeyspace.user_metrics_overview (see tombstone_warn_threshold). 1 columns was requested, slices=[-], delInfo={deletedAt=-9223372036854775808, localDeletion=2147483647} 
ERROR [CompactionExecutor:68695] 2016-03-09 06:10:31,550 CassandraDaemon.java (line 199) Exception in thread Thread[CompactionExecutor:68695,1,main] 
java.lang.OutOfMemoryError: Direct buffer memory 
     at java.nio.Bits.reserveMemory(Bits.java:658) 
     at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123) 
     at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:306) 
     at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:174) 
     at sun.nio.ch.IOUtil.read(IOUtil.java:195) 
     at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:149) 
     at org.apache.cassandra.io.compress.CompressedRandomAccessReader.decompressChunk(CompressedRandomAccessReader.java:110) 
     at org.apache.cassandra.io.compress.CompressedRandomAccessReader.reBuffer(CompressedRandomAccessReader.java:87) 
     at org.apache.cassandra.io.compress.CompressedThrottledReader.reBuffer(CompressedThrottledReader.java:41) 
     at org.apache.cassandra.io.util.RandomAccessReader.seek(RandomAccessReader.java:280) 
     at org.apache.cassandra.io.sstable.SSTableScanner$KeyScanningIterator.computeNext(SSTableScanner.java:262) 
     at org.apache.cassandra.io.sstable.SSTableScanner$KeyScanningIterator.computeNext(SSTableScanner.java:203) 
     at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) 
     at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) 
     at org.apache.cassandra.io.sstable.SSTableScanner.hasNext(SSTableScanner.java:183) 
     at org.apache.cassandra.utils.MergeIterator$Candidate.advance(MergeIterator.java:144) 
     at org.apache.cassandra.utils.MergeIterator$ManyToOne.<init>(MergeIterator.java:87) 
     at org.apache.cassandra.utils.MergeIterator.get(MergeIterator.java:46) 
     at org.apache.cassandra.db.compaction.CompactionIterable.iterator(CompactionIterable.java:47) 
     at org.apache.cassandra.db.compaction.CompactionTask.runWith(CompactionTask.java:129) 
     at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48) 
     at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
     at org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:60) 
     at org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(AbstractCompactionTask.java:59) 
     at org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionTask.run(CompactionManager.java:198) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
INFO [StorageServiceShutdownHook] 2016-03-09 06:10:31,551 ThriftServer.java (line 141) Stop listening to thrift clients 
ERROR [CompactionExecutor:68695] 2016-03-09 06:10:31,551 CassandraDaemon.java (line 199) Exception in thread Thread[CompactionExecutor:68695,1,main] 
java.lang.IllegalThreadStateException 
     at java.lang.Thread.start(Thread.java:705) 
     at org.apache.cassandra.service.CassandraDaemon$2.uncaughtException(CassandraDaemon.java:205) 
     at org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.handleOrLog(DebuggableThreadPoolExecutor.java:220) 
     at org.apache.cassandra.db.compaction.CompactionManager$CompactionExecutor.afterExecute(CompactionManager.java:973) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
INFO [StorageServiceShutdownHook] 2016-03-09 06:10:31,590 Server.java (line 182) Stop listening for CQL clients 
INFO [StorageServiceShutdownHook] 2016-03-09 06:10:31,590 Gossiper.java (line 1279) Announcing shutdown 

任何人幫助我。當我使用hector 1.0-5讀取數據時,這個錯誤不會發生。但在使用datastax java-driver core 2.0.5讀取數據時,發生此錯誤。該驅動程序有問題嗎?使用thrift和cql讀取數據有什麼不同嗎?我的密鑰空間是舊的,使用卡桑德拉-CLI創建,它的模式是

create column family user_metrics_overview 
with column_type = 'Standard' 
and comparator = 'ReversedType(org.apache.cassandra.db.marshal.TimeUUIDType)' 
and default_validation_class = 'BytesType' 
and key_validation_class = 'BytesType' 
+0

JVM無法分配直接緩衝區,您可能需要增加它並嘗試最有可能解決的問題。例如:-XX:MaxDirectMemorySize = 256/512m默認情況下,我相信是64m。 –

+0

我沒有設置-XX:MaxDirectMemorySize參數。默認值是什麼,如果沒有設置任何值? @MadhusudanaReddySunnapu –

+0

我相信這是依賴於JVM,但對於Sun/Oracle JVM,默認值爲64 MB。 –

回答

0

運行內存分析器,看看有什麼是吃了memory.Check堆轉儲分析原因吃了空間。