4

当提交日志目录的总大小超过 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)
4

3 回答 3

3

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

我个人在 Windows 上运行 cassandra,所以我将%CASSANDRA_HOME%/bin/cassandra.bat第 34 行和第 35 行从更改1G100M.

于 2012-07-05T07:31:03.887 回答
3

这意味着您已经用完了将提交日志段映射到的地址空间。

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

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

这不是第一次出现这种情况。我已经打开https://issues.apache.org/jira/browse/CASSANDRA-4422来改进默认设置。

于 2012-07-06T23:11:16.053 回答
0

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

@jbellis:他的建议帮助很大,我将 commitlog_total_space_in_mb 减少到 128 mb。

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

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

于 2012-09-26T10:31:37.937 回答