2012-01-17 4 views
4

Я попытался начать процесс с 1,2,3,4 ГБ памяти, но все равно получаю ту же ошибку. Какие-нибудь советы? Журнал 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' потребляет память _outside_ 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 –

Смежные вопросы