2012-01-17 10 views
4

1,2,3,4 GBのメモリでプロセスを開始しようとしましたが、同じエラーが表示されます。任意のヒント? gcログは、十分なメモリがあってもGCを実行していることを示しています。しかしおそらく、このエラーは、NIOを使ってメモリマップされたファイルと関係していると思われます。誰もこれの前にこのようなものを見たことがありますか?もしそうなら、それをどうやって解決しましたか?luceneインデックスを開くときにエラーが発生しました:マップに失敗しました

$ java -d64 -server -Xmx15g -Xms15g -XX:+UseConcMarkSweepGC -verbose:gc -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/frank/heap.dmp -jar lukeall-3.5.0.jar 
    [Full GC 207648K->28758K(15660544K), 0.1105290 secs] 
    [Full GC 61479K->15416K(15660544K), 0.0654310 secs] 
    [Full GC 69950K->15418K(15660544K), 0.0717170 secs] 
    [Full GC 69952K->15418K(15660544K), 0.0661720 secs] 
    java.io.IOException: Map failed 
     at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:849) 
     at org.apache.lucene.store.MMapDirectory$MMapIndexInput.<init>(MMapDirectory.java:265) 
     at org.apache.lucene.store.MMapDirectory.openInput(MMapDirectory.java:216) 
     at org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:89) 
     at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:115) 
     at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:93) 
     at org.apache.lucene.index.DirectoryReader.<init>(DirectoryReader.java:113) 
     at org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:83) 
     at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:754) 
     at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75) 
     at org.apache.lucene.index.IndexReader.open(IndexReader.java:462) 
     at org.apache.lucene.index.IndexReader.open(IndexReader.java:377) 
     at org.getopt.luke.Luke.openIndex(Unknown Source) 
     at org.getopt.luke.Luke.openOk(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at thinlet.Thinlet.invokeImpl(Unknown Source) 
     at thinlet.Thinlet.invoke(Unknown Source) 
     at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    Caused by: java.lang.OutOfMemoryError: Map failed 
     at sun.nio.ch.FileChannelImpl.map0(Native Method) 
     at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:846) 
     ... 48 more 
+0

インデックスはどれくらい大きいですか? – milan

+0

@milanのサイズは44G – user3111525

答えて

13
ulimit -v unlimited 

は、問題を修正しました!

+3

+1それも私のために働いた。自分自身に注意してください:** 1 ** '-vシェルと、いくつかのシステムでは、その子プロセスに利用可能な仮想メモリの最大量。 ** 2 ** 'sun.nio.ch.FileChannelImpl.map'はJava仮想マシンのメモリを消費します(したがって' -Xmx'を変更しても問題は解決しません)。 jvmがオブジェクトを作成できないためではなく、jvmにシステムから使用できるメモリが増えているため、プロセスのメモリーが不足しています。 ** 3 ** 'セッションはinitによってセッションが再開された後に有効になります。 ' – Alberto

+0

私のために働いてくれました。 @Alberto -Xmx値を見つめてこのエラーを解決できないことをよく説明してくれてありがとうございます。 – Harald

+1

私も同様の問題がありましたが、ulimit -v unlimitedは私の解決策ではありませんでした。私はmax_map_countを変更しなければなりませんでした。http://stackoverflow.com/questions/11683850/how-much-memory-could-vm-use-in-linux –