2016-04-21 45 views
0

我的場景,WSO2 DAS - 索引數據中的錯誤peekNext:映射失敗

我在Mysql數據庫中有一些事務詳細信息。我使用WSO2 ESB服務器並將這些數據推送到WSO2 DAS服務器(使用主鍵和索引持久存儲H2 DB中的數據)。數據已成功加載到DAS服務器,但是我面對的問題是,我每隔三秒就會在DAS控制檯中看到一個錯誤。錯誤在下面給出。

[2016-04-21 09:09:48,175] ERROR {org.wso2.carbon.analytics.dataservice.core.indexing.AnalyticsDataIndexer} - Error in p 
rocessing index batch operations: Error in index data peekNext: Map failed 
org.wso2.carbon.analytics.datasource.commons.exception.AnalyticsException: Error in index data peekNext: Map failed 
     at org.wso2.carbon.analytics.dataservice.core.indexing.LocalIndexDataStore$LocalIndexDataQueue.peekNext(LocalInd 
exDataStore.java:287) 
     at org.wso2.carbon.analytics.dataservice.core.indexing.AnalyticsDataIndexer.processLocalShardDataQueue(Analytics 
DataIndexer.java:297) 
     at org.wso2.carbon.analytics.dataservice.core.indexing.AnalyticsDataIndexer.processIndexOperations(AnalyticsData 
Indexer.java:261) 
     at org.wso2.carbon.analytics.dataservice.core.indexing.AnalyticsDataIndexer.access$200(AnalyticsDataIndexer.java 
:141) 
     at org.wso2.carbon.analytics.dataservice.core.indexing.AnalyticsDataIndexer$IndexWorker.run(AnalyticsDataIndexer 
.java:1865) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.IOException: Map failed 
     at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:888) 
     at com.leansoft.bigqueue.page.MappedPageFactoryImpl.acquirePage(MappedPageFactoryImpl.java:86) 
     at com.leansoft.bigqueue.BigArrayImpl.append(BigArrayImpl.java:325) 
     at com.leansoft.bigqueue.BigQueueImpl.enqueue(BigQueueImpl.java:92) 
     at org.wso2.carbon.analytics.dataservice.core.indexing.LocalIndexDataStore$LocalIndexDataQueue.peekNext(LocalInd 
exDataStore.java:271) 
     ... 7 more 
Caused by: java.lang.OutOfMemoryError: Map failed 
     at sun.nio.ch.FileChannelImpl.map0(Native Method) 
     at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:885) 
     ... 11 more 

我不知道爲什麼會發生這種情況。請提前幫助和感謝。

回答

1

發生這種情況是因爲您使用的H2是內存數據庫中的內存映射文件。我們不建議在生產部署中使用H2。

此錯誤通常出現在映射內存中的大文件時,例如試圖映射文件比1或2GB

您還可以使用-d64-XX:MaxDirectMemorySize JVM選項啓用大直接緩衝區

+0

感謝您的幫助更大。 兩個簡單的問題! 1.我的數據現在並不大(從mysql只有100行),我只是使用測試數據,上面的錯誤信息仍然會出現。 2.如果是這樣,我可以在哪裏使用JVM中的-d64和-XX:MaxDirectMemorySize選項 – Aswin

+0

您可以在DAS的啓動腳本中添加這些JAVA選項。 –

+0

是不是-XX:MaxDirectMemorySize的默認值是無界的?我們應該明確給它一個價值嗎? – Aswin