2015-03-26 3 views
0

Помещение: Я новичок по java-вопросам, но я пытаюсь понять.OutOfMemoryError: Java куча пространства в solr, но куча не заполнена

Я испытываю «OutOfMemoryError: Java heap space» в экземпляре SOLR при высокой нагрузке (много одновременных запросов только в режиме чтения).

Я обнаружил, что общее решение в этих ситуациях заключается в увеличении максимального размера кучи с помощью параметра -Xmx, но, глядя на цифры на jconsole, я наблюдаю, что используется только 50% общей кучи 1G. Только пространство Идена и пространство для выживания иногда достигали 100%, но я понял, что это нормально.

Есть случаи, когда мы можем иметь OutofMemoryError в куче, даже если он не заполнен? Какие параметры можно задать, чтобы избежать этого?

+0

Вы уверены, что это не область пергентов, которая заполняется? –

+0

Да, solr log говорит: 'java.lang.OutOfMemoryError: Java heap space' – Zac

+0

@AniketThakur вы получите ошибку пермг, если область перменца, которая заполняется, не является ошибкой кучи –

ответ

1

Несомненно, это возможно. Несколько распространенный случай - если у вас действительно большие объекты, то иногда JVM будет автоматически создавать их в поколенном поколении. Если для его экземпляра не существует непрерывного блока, вы получите ошибку пространства кучи.

Я столкнулся с аналогичной проблемой с Solr около года назад, и это было связано с интенсивным использованием динамических полей в импорте, которые, в свою очередь, пытались создать много (и больших) объектов. Вы используете много динамических полей?

Я думаю, что у комментаторов все правильно, вы должны взять кучу кучи и попытаться выяснить, что происходит на этом пути. Когда вы дойдете до настройки Solr, вы, вероятно, будете изменять размеры кучи в любом случае.

Я нашел эту страницу довольно полезным: http://www.kdgregory.com/index.php?page=java.outOfMemory

+0

Отличная ссылка @Mike: очень интересно. Мы не используем динамические поля. Я выполнил кучу кучи, но теперь я пытаюсь это понять: он огромен! – Zac

1

Просто проверить, если вы используете JREx32 на OSx64. Это может вызвать вашу проблему. Я только что запустил мой сервер solr после просмотра журналов.

Посмотреть на бревне Java самосвала на что-то вроде этого:

tenured generation total 174784K, used 174765K [0x09750000, 0x14200000, 0x14200000) the space 174784K, 99% used [0x09750000, 0x141fb588, 0x141fb600, 0x14200000)

Кажется, что сборщик мусора работает не так хорошо для somths ява поколений в различных бит JRE и ОС.