[ 
https://issues.apache.org/jira/browse/CASSANDRA-7303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14008984#comment-14008984
 ] 

Jacek Furmankiewicz commented on CASSANDRA-7303:
------------------------------------------------

Nevertheless, the server crashed.

Is there any way where Cassandra could guard against this and a throw an 
exception (QueryTooLargeException or something like that) instead of just dying 
and affecting multiple applications that may be using it in production?

> OutOfMemoryError during prolonged batch processing
> --------------------------------------------------
>
>                 Key: CASSANDRA-7303
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7303
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>         Environment: Server: RedHat 6, 64-bit, Oracle JDK 7, Cassandra 2.0.6
> Client: Java 7, Astyanax
>            Reporter: Jacek Furmankiewicz
>              Labels: crash, outofmemory
>
> 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



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to