cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Ellis <jbel...@gmail.com>
Subject Re: get_slice OOM on large row
Date Sat, 29 Jan 2011 01:31:35 GMT
Requesting too much data in a single request is user error.  That is
why you have start columns/rows, so you can page through a large set.

On Fri, Jan 28, 2011 at 6:48 PM, Rajat Chopra <rchopra@makara.com> wrote:
> Hi!
>
>    Trying to test the 0.7 release with some offbeat settings to check the
> behavior.
>
>
>
> -          Single node cluster
>
> -          Key_cache_size – default
>
> -          Row_cache_size – default
>
> -          Min/max compaction threshold – 0 (so this is disabled)
>
> -          Disk_access_mode : standard
>
> -          Memtable_throughput_in_mb : 2 (yes two mb only)
>
>
>
> Basically I wanted to run the process with least amount of memory usage.
> Without much hassle (probably because compaction was disabled) I put 400k
> columns in a single row of a super column of a cf. Each column value being
> about 20kb. So, I have about 8G of data.
>
>
>
> Now the issue is that I run into OOM on any kind of read that I do, even
> with –Xmx2G. Using pycassa as the high level client.
>
> The trace is pasted below.
>
>
>
> Is it because the entire row is loaded even if some keys are asked for?
>
> Please help for my better understanding of limitations/usage.
>
>
>
> Thanks,
>
> Rajat
>
>
>
>
>
> Heap dump file created [2147332020 bytes in 16.621 secs] ERROR 16:38:06,420
> Fatal exception in thread Thread[ReadStage:5,5,main]
>
> java.lang.OutOfMemoryError: Java heap space
>
>       at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
>
>       at java.nio.ByteBuffer.allocate(ByteBuffer.java:329)
>
>       at
> org.apache.cassandra.utils.FBUtilities.readByteArray(FBUtilities.java:277)
>
>       at
> org.apache.cassandra.db.ColumnSerializer.deserialize(ColumnSerializer.java:94)
>
>       at
> org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:364)
>
>       at
> org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:313)
>
>       at
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.readSimpleColumns(SSTableNamesIterator.java:144)
>
>       at
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.read(SSTableNamesIterator.java:130)
>
>       at
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.<init>(SSTableNamesIterator.java:70)
>
>       at
> org.apache.cassandra.db.filter.NamesQueryFilter.getSSTableColumnIterator(NamesQueryFilter.java:59)
>
>       at
> org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:81)
>
>       at
> org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1215)
>
>       at
> org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1107)
>
>       at
> org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1077)
>
>       at org.apache.cassandra.db.Table.getRow(Table.java:384)
>
>       at
> org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:63)
>
>       at
> org.apache.cassandra.service.StorageProxy$weakReadLocalCallable.call(StorageProxy.java:777)
>
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>
>       at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>
>       at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>
>       at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>
>       at java.lang.Thread.run(Thread.java:636)
>
> ERROR 16:38:06,717 Internal error processing get_slice
>
> java.lang.RuntimeException: java.util.concurrent.ExecutionException:
> java.lang.OutOfMemoryError: Java heap space
>
>       at
> org.apache.cassandra.service.StorageProxy.weakRead(StorageProxy.java:282)
>
>       at
> org.apache.cassandra.service.StorageProxy.readProtocol(StorageProxy.java:224)
>
>       at
> org.apache.cassandra.thrift.CassandraServer.readColumnFamily(CassandraServer.java:98)
>
>       at
> org.apache.cassandra.thrift.CassandraServer.getSlice(CassandraServer.java:195)
>
>       at
> org.apache.cassandra.thrift.CassandraServer.multigetSliceInternal(CassandraServer.java:271)
>
>       at
> org.apache.cassandra.thrift.CassandraServer.get_slice(CassandraServer.java:233)
>
>       at
> org.apache.cassandra.thrift.Cassandra$Processor$get_slice.process(Cassandra.java:2699)
>
>       at
> org.apache.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:2555)
>
>       at
> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:167)
>
>       at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>
>       at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>
>       at java.lang.Thread.run(Thread.java:636)
>
> Caused by: java.util.concurrent.ExecutionException:
> java.lang.OutOfMemoryError: Java heap space
>
>       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
>
>       at java.util.concurrent.FutureTask.get(FutureTask.java:111)
>
>       at
> org.apache.cassandra.service.StorageProxy.weakRead(StorageProxy.java:278)
>
>       ... 11 more
>
> Caused by: java.lang.OutOfMemoryError: Java heap space
>
>       at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
>
>       at java.nio.ByteBuffer.allocate(ByteBuffer.java:329)
>
>       at
> org.apache.cassandra.utils.FBUtilities.readByteArray(FBUtilities.java:277)
>
>       at
> org.apache.cassandra.db.ColumnSerializer.deserialize(ColumnSerializer.java:94)
>
>       at
> org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:364)
>
>       at
> org.apache.cassandra.db.SuperColumnSerializer.deserialize(SuperColumn.java:313)
>
>       at
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.readSimpleColumns(SSTableNamesIterator.java:144)
>
>       at
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.read(SSTableNamesIterator.java:130)
>
>       at
> org.apache.cassandra.db.columniterator.SSTableNamesIterator.<init>(SSTableNamesIterator.java:70)
>
>       at
> org.apache.cassandra.db.filter.NamesQueryFilter.getSSTableColumnIterator(NamesQueryFilter.java:59)
>
>       at
> org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:81)
>
>       at
> org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1215)
>
>       at
> org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1107)
>
>       at
> org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1077)
>
>       at org.apache.cassandra.db.Table.getRow(Table.java:384)
>
>       at
> org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:63)
>
>       at
> org.apache.cassandra.service.StorageProxy$weakReadLocalCallable.call(StorageProxy.java:777)
>
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>
>       at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>
>       ... 3 more
>
>



-- 
Jonathan Ellis
Project Chair, Apache Cassandra
co-founder of DataStax, the source for professional Cassandra support
http://www.datastax.com

Mime
View raw message