当提交日志目录的总大小超过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)
答案 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工作。
** 注意:只有在提交日志文件夹中有不必要的数据时才尝试此操作(您不需要的数据)