I started seeing OOM when running hector's unit-tests on 0.7.0. The OOM is
in cassandra's code so either there had been recent changes within cassandra
or it's just that we added new coverage which causes this OOM.

On my mac it's 100% repro but other hector devs have reported they don't get
this OOM. Moreover, it I place a Thread.sleep(5000) in one of the tests the
OOM goes away (but other errors are still present see more below)

To reproduce the error you may checkout hector from
http://github.com/rantav/hector, switch to the 0.7.0 branch and run:

$ MAVEN_OPTS="-Xmx1G -Xms256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=1" *mvn test -Dtest=CassandraClusterTest*

(I'm using the default memory settings from 0.7.0)

The test class source code is here
http://github.com/rantav/hector/blob/0.7.0/src/test/java/me/prettyprint/cassandra/service/CassandraClusterTest.java

This test basically adds, removes, renames keyspaces etc.

Here's the OOM log:

18:07:04,197  INFO ColumnFamilyStore:734 - Enqueuing flush of
memtable-sch...@72177013(3455 bytes, 3 operations)
18:07:04,487 ERROR AbstractCassandraDaemon:88 - Fatal exception in thread
Thread[FLUSH-WRITER-POOL:1,5,main]
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java
heap space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
 at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at
org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.afterExecute(DebuggableThreadPoolExecutor.java:87)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:888)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.OutOfMemoryError: Java heap space
at
org.apache.cassandra.io.util.BufferedRandomAccessFile.init(BufferedRandomAccessFile.java:151)
 at
org.apache.cassandra.io.util.BufferedRandomAccessFile.<init>(BufferedRandomAccessFile.java:144)
at
org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:61)
 at org.apache.cassandra.db.Memtable.writeSortedContents(Memtable.java:151)
at org.apache.cassandra.db.Memtable.access$000(Memtable.java:44)
 at org.apache.cassandra.db.Memtable$1.runMayThrow(Memtable.java:168)
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
 at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 ... 2 more
18:07:04,491  INFO Memtable:150 - Writing memtable-sch...@72177013(3455
bytes, 3 operations)
18:07:04,812  INFO CompactionManager:323 - Compacted to
/Users/ran/dev/cassandra/hector/tmp/var/lib/cassandra/data/system/Schema-tmp-e-6-Data.db.
 15,707 to 15,173 (~96% of original) bytes for 5 keys.  Time: 860ms.
18:07:04,812 ERROR AbstractCassandraDaemon:88 - Fatal exception in thread
Thread[FLUSH-WRITER-POOL:1,5,main]
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java
heap space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
 at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at
org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.afterExecute(DebuggableThreadPoolExecutor.java:87)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:888)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.OutOfMemoryError: Java heap space
at
org.apache.cassandra.io.util.BufferedRandomAccessFile.init(BufferedRandomAccessFile.java:151)
 at
org.apache.cassandra.io.util.BufferedRandomAccessFile.<init>(BufferedRandomAccessFile.java:144)
at
org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:61)
 at org.apache.cassandra.db.Memtable.writeSortedContents(Memtable.java:151)
at org.apache.cassandra.db.Memtable.access$000(Memtable.java:44)
 at org.apache.cassandra.db.Memtable$1.runMayThrow(Memtable.java:168)
at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
 at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 ... 2 more


Here the log after I place a sleep(5000) at this line
http://github.com/rantav/hector/blob/0.7.0/src/test/java/me/prettyprint/cassandra/service/CassandraClusterTest.java#L88
The file-not-found error is even more suspicious...

18:04:28,293 ERROR AbstractCassandraDaemon:88 - Fatal exception in thread
Thread[CompactionExecutor:1,1,main]
java.util.concurrent.ExecutionException: java.io.FileNotFoundException:
/Users/ran/dev/cassandra/hector/tmp/var/lib/cassandra/data/system/Schema-tmp-e-7-Filter.db
(No such file or directory)
 at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
 at
org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor.afterExecute(DebuggableThreadPoolExecutor.java:87)
at
org.apache.cassandra.db.CompactionManager$CompactionExecutor.afterExecute(CompactionManager.java:604)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:888)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:637)
Caused by: java.io.FileNotFoundException:
/Users/ran/dev/cassandra/hector/tmp/var/lib/cassandra/data/system/Schema-tmp-e-7-Filter.db
(No such file or directory)
 at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
 at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at
org.apache.cassandra.io.sstable.SSTableWriter$IndexWriter.close(SSTableWriter.java:382)
 at
org.apache.cassandra.io.sstable.SSTableWriter.closeAndOpenReader(SSTableWriter.java:144)
at
org.apache.cassandra.db.CompactionManager.doCompaction(CompactionManager.java:314)
 at
org.apache.cassandra.db.CompactionManager$1.call(CompactionManager.java:107)
at
org.apache.cassandra.db.CompactionManager$1.call(CompactionManager.java:88)
 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
... 2 more


$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-9M3165)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01-279, mixed mode)

Reply via email to