Cassandra java.io.IOException:COMMIT-LOG-ALLOCATOR映射失败

时间:2012-07-05 06:43:38

标签: cassandra

当提交日志目录的总大小超过680 Mb时,它会抛出此异常

ERROR [COMMIT-LOG-ALLOCATOR] 2012-07-04 15:04:57,070 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[COMMIT-LOG-ALLOCATOR,5,main]
java.io.IOError: java.io.IOException: Map failed
    at org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:127)
    at org.apache.cassandra.db.commitlog.CommitLogAllocator$3.run(CommitLogAllocator.java:203)
    at org.apache.cassandra.db.commitlog.CommitLogAllocator$1.runMayThrow(CommitLogAllocator.java:95)
    at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Map failed
    at sun.nio.ch.FileChannelImpl.map(Unknown Source)
    at org.apache.cassandra.db.commitlog.CommitLogSegment.<init>(CommitLogSegment.java:119)
    ... 4 more
Caused by: java.lang.OutOfMemoryError: Map failed
    at sun.nio.ch.FileChannelImpl.map0(Native Method)
    ... 6 more
ERROR [StorageServiceShutdownHook] 2012-07-04 15:04:57,075 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[StorageServiceShutdownHook,5,main]
java.lang.NullPointerException
    at org.apache.cassandra.gms.Gossiper.stop(Gossiper.java:1132)
    at org.apache.cassandra.service.StorageService$2.runMayThrow(StorageService.java:489)
    at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30)
    at java.lang.Thread.run(Unknown Source)

3 个答案:

答案 0 :(得分:3)

根据您的操作系统,您应该更改Java VM的-Xmx-Xms参数。

我亲自在Windows上运行cassandra,因此我已将%CASSANDRA_HOME%/bin/cassandra.bat第34和35行从1G更改为100M

答案 1 :(得分:3)

这意味着你已经用完地址空间来将commitlog段映射到。

最佳解决方案:升级到64位JVM。

更糟糕的解决方案:在cassandra.yaml中,将commitlog_segment_size_in_mb和commitlog_total_space_in_mb都设置为16。

这不是第一次出现;我已经打开https://issues.apache.org/jira/browse/CASSANDRA-4422来改善默认值。

答案 2 :(得分:0)

好吧,我遇到了同样的问题而且整天都浪费了,但我无法将其更新为64位JVM,因为我的Ubuntu机器是32位。

@jbellis:他的建议帮了很多忙,我将commitlog_total_space_in_mb减少到128 mb。

但即使应用了这个,我仍然得到错误。我解决了这个问题,并通过删除/ var / lib目录中包含(commitlog,data和saved_caches)的Cassandra文件夹来使cassandra工作。

** 注意:只有在提交日志文件夹中有不必要的数据时才尝试此操作(您不需要的数据)