Почему Lucene вызывает OOM при индексации больших файлов?

Вхождение в незащищенный паролем Java keystore и изменение пароля могут быть сделаны со справкой самого языка программирования Java.

, Что статья содержит код для этого:

thetechawesomeness.ideasmatter.info

5
задан aymeric 31 October 2012 в 19:24
поделиться

4 ответа

Профилирование - единственный способ определить такое большое потребление памяти.

Кроме того, в вашем коде вы, возможно, не закрываете обработчики файлов, индексаторы, устройства записи виновник OOM,

1
ответ дан 14 December 2019 в 08:56
поделиться

Вы можете настроить IndexWriter на сброс на основе использования памяти или количества документов - я бы предложил установить его на flsuh на основе памяти и посмотреть, решит ли это вашу проблему. Я предполагаю, что весь ваш индекс живет в памяти, потому что вы никогда не сбрасываете его на диск.

0
ответ дан 14 December 2019 в 08:56
поделиться

В ответ как комментарий к Гэндальфу

я вижу, что вы установив для setMergeFactor значение 1000

, API сообщает

setMergeFactor

public void setMergeFactor (int mergeFactor)

Определяет, как часто индексы сегментов объединены addDocument (). При меньших значениях меньше ОЗУ используется при индексировании , и поиск по неоптимизированным индексам быстрее, но скорость индексации ниже. Чем больше значение, тем больше используется ОЗУ. при индексировании и при поиске на неоптимизированные показатели медленнее, индексация быстрее. Таким образом, большие значения (> 10) лучше всего подходят для индексирования партии создание и меньшие значения (<10) для индексов, которые интерактивно поддерживается.

Этот метод удобен, он использует оперативную память, когда вы увеличиваете mergeFactor

Я бы посоветовал установить его примерно на 15 или около того .; (методом проб и ошибок) дополнен setRAMBufferSizeMB, также вызывает Commit () . затем optimize () и затем close () объект indexwriter. (возможно, создайте JavaBean и поместите все эти методы в один метод) вызовите этот метод, когда вы закрываете индекс.

сообщение с вашим результатом, обратная связь =]

4
ответ дан 14 December 2019 в 08:56
поделиться

Мы столкнулись с некоторыми аналогичными проблемами «нехватки памяти» ранее в этом году при построении поисковых индексов для нашей поисковой системы репозитория maven на jarvana.com . Мы создавали индексы на 64-битной четырехъядерной машине с Windows Vista, но мы работали с 32-битной Java и 32-битной Eclipse. Для JVM у нас было выделено 1,5 ГБ ОЗУ. Мы использовали Lucene 2.3.2. Приложение индексирует около 100 ГБ в основном сжатых данных, а наши индексы составляют около 20 ГБ.

Мы попробовали несколько вещей, таких как очистка IndexWriter, явный вызов сборщика мусора через System.gc (), попытка разыменовать все возможно и т. д. Мы использовали JConsole для мониторинга использования памяти. Как ни странно, мы довольно часто сталкивались с ошибками «OutOfMemoryError: Java heap space», хотя они не должны были возникать, на основе того, что мы видели в JConsole. Мы пытались переключиться на разные версии 32-битной Java, и это не помогло.

В конце концов мы перешли на 64-битную Java и 64-битную Eclipse. Когда мы это сделали, сбои нашей кучи памяти во время индексирования исчезли при работе с 1,5 ГБ, выделенными для 64-разрядной JVM. Кроме того, переход на 64-битную Java позволил нам выделить больше памяти для JVM (мы перешли на 3 ГБ), что ускорило нашу индексацию.

Не уверен, что именно предлагать, если вы используете XP. Для нас наши проблемы OutOfMemoryError, казалось, имели отношение к 64-разрядной Windows Vista и 32-разрядной версии Java. Возможно, вам может помочь переключение на работу на другом компьютере (Linux, Mac, другая Windows). Не знаю, исчезли ли наши проблемы навсегда, но, похоже, они исчезли на данный момент.

Мы пытались переключиться на разные версии 32-битной Java, и это не помогло.

В конце концов мы перешли на 64-битную Java и 64-битную Eclipse. Когда мы это сделали, сбои нашей кучи памяти во время индексирования исчезли при работе с 1,5 ГБ, выделенными для 64-разрядной JVM. Кроме того, переход на 64-битную Java позволил нам выделить больше памяти для JVM (мы перешли на 3 ГБ), что ускорило нашу индексацию.

Не уверен, что именно предлагать, если вы используете XP. Для нас наши проблемы OutOfMemoryError, казалось, имели отношение к 64-разрядной Windows Vista и 32-разрядной версии Java. Возможно, вам может помочь переключение на работу на другом компьютере (Linux, Mac, другая Windows). Я не знаю, исчезли ли наши проблемы навсегда, но, похоже, на данный момент они исчезли.

Мы пытались переключиться на разные версии 32-битной Java, и это не помогло.

В конце концов мы перешли на 64-битную Java и 64-битную Eclipse. Когда мы это сделали, сбои нашей кучи памяти во время индексирования исчезли при работе с 1,5 ГБ, выделенными для 64-разрядной JVM. Кроме того, переход на 64-битную Java позволил нам выделить больше памяти для JVM (мы перешли на 3 ГБ), что ускорило нашу индексацию.

Не уверен, что именно предлагать, если вы используете XP. Для нас проблемы с OutOfMemoryError, казалось, имели отношение к 64-битной Windows Vista и 32-битной Java. Возможно, поможет переключение на работу на другом компьютере (Linux, Mac, другая Windows). Не знаю, исчезли ли наши проблемы навсегда, но, похоже, они исчезли на данный момент.

Когда мы это сделали, сбои нашей кучи памяти во время индексирования исчезли при работе с 1,5 ГБ, выделенными для 64-разрядной JVM. Кроме того, переход на 64-битную Java позволил нам выделить больше памяти для JVM (мы перешли на 3 ГБ), что ускорило нашу индексацию.

Не уверен, что именно предлагать, если вы используете XP. Для нас наши проблемы OutOfMemoryError, казалось, имели отношение к 64-разрядной Windows Vista и 32-разрядной версии Java. Возможно, вам может помочь переключение на работу на другом компьютере (Linux, Mac, другая Windows). Не знаю, исчезли ли наши проблемы навсегда, но, похоже, они исчезли на данный момент.

Когда мы это сделали, сбои нашей кучи памяти во время индексирования исчезли при работе с 1,5 ГБ, выделенными для 64-разрядной JVM. Кроме того, переход на 64-битную Java позволил нам выделить больше памяти для JVM (мы перешли на 3 ГБ), что ускорило нашу индексацию.

Не уверен, что именно предлагать, если вы используете XP. Для нас наши проблемы OutOfMemoryError, казалось, имели отношение к 64-разрядной Windows Vista и 32-разрядной версии Java. Возможно, поможет переключение на работу на другом компьютере (Linux, Mac, другая Windows). Я не знаю, исчезли ли наши проблемы навсегда, но, похоже, на данный момент они исчезли.

Не знаю, что подсказать, если у вас XP. Для нас проблемы с OutOfMemoryError, казалось, имели отношение к 64-битной Windows Vista и 32-битной Java. Возможно, вам может помочь переключение на работу на другом компьютере (Linux, Mac, другая Windows). Я не знаю, исчезли ли наши проблемы навсегда, но, похоже, на данный момент они исчезли.

Не знаю, что подсказать, если у вас XP. Для нас наши проблемы OutOfMemoryError, казалось, имели отношение к 64-разрядной Windows Vista и 32-разрядной версии Java. Возможно, вам может помочь переключение на работу на другом компьютере (Linux, Mac, другая Windows). Не знаю, исчезли ли наши проблемы навсегда, но, похоже, они исчезли на данный момент.

0
ответ дан 14 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: