使用默认配置的Cassandra安装。只需一个节点服务器,48GB内存,2 TB硬盘。当它显着减速时,插入了大约8000万行。超时错误拒绝新连接。
Opssenter也会抛出超时。
htop显示1个加载CPU 100%的cassandra进程
iotop显示周期性读取/写入,但实际上是低密集型 - 因此HDD不是瓶颈
很多RAM仍然是免费的,没有任何东西被交换
nodetool tpstats - 没有工作,用“java.net.SocketTimeoutException:read timed out”粉碎了
nodetool status - 显示服务器正常工作(!):UN,load为122GB,拥有100%,令牌256
tail /var/log/cassandra/system.log - 对我来说没什么信息,最后一行是
INFO [ScheduledTasks:1] 2014-02-16 04:36:21,824 StatusLogger.java (line 121) system.local
发生了什么事?如何查找当前执行的操作列表?如何找到那种行为的原因?以及如何让它恢复正常?
谢谢!
P.S。最后它抛出了一个例外:
ERROR [ReadStage:1550] 2014-02-16 05:22:26,476 CassandraDaemon.java(第192行)线程中的异常线程[ReadStage:1550,5,main] java.lang.OutOfMemoryError:Java堆空间 在org.apache.cassandra.io.util.RandomAccessReader。(RandomAccessReader.java:69) 在org.apache.cassandra.io.compress.CompressedRandomAccessReader。(CompressedRandomAccessReader.java:76) 在org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:43) 在org.apache.cassandra.io.util.CompressedPoolingSegmentedFile.createReader(CompressedPoolingSegmentedFile.java:48) 在org.apache.cassandra.io.util.PoolingSegmentedFile.getSegment(PoolingSegmentedFile.java:39) at org.apache.cassandra.io.sstable.SSTableReader.getFileDataInput(SSTableReader.java:1195) 在org.apache.cassandra.db.columniterator.IndexedSliceReader.setToRowStart(IndexedSliceReader.java:108) 在org.apache.cassandra.db.columniterator.IndexedSliceReader。(IndexedSliceReader.java:84) 在org.apache.cassandra.db.columniterator.SSTableSliceIterator.createReader(SSTableSliceIterator.java:65) 在org.apache.cassandra.db.columniterator.SSTableSliceIterator。(SSTableSliceIterator.java:42) 在org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:167) 在org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:62) 在org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:273) 在org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:53) 在org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1560) 在org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1379) 在org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:327) 在org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:65) 在org.apache.cassandra.service.StorageProxy $ LocalReadRunnable.runMayThrow(StorageProxy.java:1396) 在org.apache.cassandra.service.StorageProxy $ DroppableRunnable.run(StorageProxy.java:1931) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:744)
答案 0 :(得分:0)
从Cassandra的角度来看,你确定它们实际上是8000万行吗?如果您使用的是CQL3,并且主键的第一列对于所有行都是相同的,则它们将全部位于隐蔽下的同一行中,因为这是分区键。这可以让卡桑德拉陷入困境。
检查“行大小”列的cfhistograms,看看是否有大量行。