2012-07-05 107 views
4

當提交日誌目錄exceedes高於680 MB的總規模會拋出該異常卡桑德拉產生java.io.IOException:地圖失敗COMMIT-LOG-分配器

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

根據您的操作系統,你應該改變Java VM的參數-Xmx-Xms

我個人在windows上運行cassandra,所以我已將%CASSANDRA_HOME%/bin/cassandra.bat第34行和第35行從1G更改爲100M

+0

這真的對我的感謝工作u能告訴我原因 –

+0

我不確定我們的案件是否相同。在我的情況下,它是https://issues.apache.org/jira/browse/CASSANDRA-4201?focusedCommentId=13266183&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13266183 – 2012-07-05 20:39:42

+0

@SunilKumar http ://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Tamil

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以改善默認設置。

0

嗯,我有同樣的問題,我的整個一天都浪費了,但我無法將它更新到64位JVM,因爲我的Ubuntu機器是32位。

@jbellis:他的建議幫了我很多,我將commitlog_total_space_in_mb減少到了128 MB。

但即使應用這個,我仍然有錯誤。我解決了這個問題,並通過刪除/ var/lib目錄中包含(commitlog,data和saved_caches)的Cassandra文件夾來使cassandra正常工作。

**注:試試這個前提是你必須在提交日誌文件夾(你不需要數據)不必要的數據