Uploaded image for project: 'Apache Cassandra'
  1. Apache Cassandra
  2. CASSANDRA-7303

OutOfMemoryError during prolonged batch processing

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Normal
    • Resolution: Won't Fix
    • None
    • None
    • Server: RedHat 6, 64-bit, Oracle JDK 7, Cassandra 2.0.6

      Client: Java 7, Astyanax

    • Normal

    Description

      We have a prolonged batch processing job.
      It writes a lot of records, every batch mutation creates probably on average 300-500 columns per row key (with many disparate row keys).

      It works fine but within a few hours we get error like this:

      ERROR [Thrift:15] 2014-05-24 14:16:20,192 CassandraDaemon.java (line |

      196) Except
      ion in thread Thread[Thrift:15,5,main]
      java.lang.OutOfMemoryError: Requested array size exceeds VM limit
      at java.util.Arrays.copyOf(Arrays.java:2271)
      at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
      at java.io.ByteArrayOutputStream.ensureCapacity
      (ByteArrayOutputStream.ja
      va:93)
      at java.io.ByteArrayOutputStream.write
      (ByteArrayOutputStream.java:140)
      at org.apache.thrift.transport.TFramedTransport.write
      (TFramedTransport.j
      ava:146)
      at org.apache.thrift.protocol.TBinaryProtocol.writeBinary
      (TBinaryProtoco
      l.java:183)
      at org.apache.cassandra.thrift.Column$ColumnStandardScheme.write
      (Column.
      java:678)
      at org.apache.cassandra.thrift.Column$ColumnStandardScheme.write
      (Column.
      java:611)
      at org.apache.cassandra.thrift.Column.write(Column.java:538)
      at org.apache.cassandra.thrift.ColumnOrSuperColumn
      $ColumnOrSuperColumnSt
      andardScheme.write(ColumnOrSuperColumn.java:673)
      at org.apache.cassandra.thrift.ColumnOrSuperColumn
      $ColumnOrSuperColumnSt
      andardScheme.write(ColumnOrSuperColumn.java:607)
      at org.apache.cassandra.thrift.ColumnOrSuperColumn.write
      (ColumnOrSuperCo
      lumn.java:517)
      at org.apache.cassandra.thrift.Cassandra$get_slice_result
      $get_slice_resu
      ltStandardScheme.write(Cassandra.java:11682)
      at org.apache.cassandra.thrift.Cassandra$get_slice_result
      $get_slice_resu
      ltStandardScheme.write(Cassandra.java:11603)
      at org.apache.cassandra.thrift.Cassandra

      The server already has 16 GB heap, which we hear is the max Cassandra can run with. The writes are heavily multi-threaded from a single server.

      The jist of the issue is that Cassandra should not crash with OOM when under heavy load. It is OK to slow down, even maybe start throwing operation timeout exceptions, etc.

      But to just crash in the middle of the processing should not be allowed.

      is there any internal monitoring of heap usage in Cassandra where it could detect that it is getting close to the heap limit and start throttling the incoming requests to avoid this type of error?

      Thanks

      Attachments

        Activity

          People

            Unassigned Unassigned
            jfurmankiewicz Jacek Furmankiewicz
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: