Мое приложение бросает java.lang.OutOfMemoryError: GC overhead limit exceeded
Ошибка. Я обыскал его и получил достаточно информации. Oracle говорит:ставка между gc распределение кучи и моя java-программа
Причина: Подробное сообщение «Превышение предельного уровня GC» указывает, что сборщик мусора работает все время, и программа Java делает очень медленный прогресс. После сбора мусора, если процесс Java тратит более 98% времени на сборку мусора, и если он восстанавливает менее 2% кучи и до сих пор делает последние 5 (постоянная времени компиляции) последовательного мусора коллекции, затем вызывается java.lang.OutOfMemoryError. Это исключение обычно выбрасывается из-за того, что количество живых данных едва вписывается в кучу Java, у которой мало свободного места для новых распределений. Действие: Увеличьте размер кучи. Исключение java.lang.OutOfMemoryError для превышения верхнего предела GC может быть отключено с помощью флаг командной строки -XX: -UseGCOverheadLimit.
Мой вопрос: как я могу отслеживать кучу, выделенную GC
, и моей программой java. Я попробовал jstat -gcutil
, но у него недостаточно информации. Есть ли инструмент, который я могу видеть скорость между моим распределением кучи java-программы за GC
распределением кучи? Спасибо за консультацию.
jconsole или коммерческие профайлы, например. jprofiler –