Вопрос

Кто-нибудь использовал Eclipse memory manager для обнаружения утечки памяти в java-кодах?Кто-нибудь может порекомендовать хорошее место для поиска информации об использовании диспетчера памяти?Я прочитал кое-что в Интернете, это предполагает, что мне нужно позволить программе работать до тех пор, пока она не выйдет из строя (произойдет ошибка нехватки памяти), которая сгенерирует отчет о сбое.Затем с помощью диспетчера памяти откройте этот отчет, чтобы выяснить, где может произойти утечка памяти.Это то, как все используют диспетчер памяти?

Это было полезно?

Решение

Хотя -XX: + HeapDumpOnOutOfMemoryError может быть полезным, мой текущий рабочий процесс для использования Eclipse Memory Manager:

<Ол>
  • Запустите программу нормально
  • Подождите, пока память выйдет из-под контроля.
  • Запустите jmap : jmap -dump: format = b, file = dump.hprof < PID >
  • Откройте файл hprof в EMM.
  • Я обычно начинаю работать с представлениями гистограммы и дерева доминантов, чтобы посмотреть, не кажется ли что-то нехорошим, а затем перейти к следующему.

    VisualVM может быть полезен, но кажется гораздо менее эффективным, чем EMM, при работе с дампом кучи (EMM кеширует много информации о загрузке дампа кучи). Netbeans Profiler удобен для получения местоположений распределения и для профилирования времени.

    Другие советы

    Возможно, самое простое - запустить программу под HProf (входит в стандартную комплектацию JVM) на некоторое время и принудительно завершает работу. Надеемся, что вывод HProf даст вам несколько подсказок. утечка памяти.

    В отличие от отладчика памяти Eclipse (о котором я знаю только из того, что вы пишете), вы можете собирать статистику из любой точки выполнения.

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

    Я не думаю, что это правда - вы не получите файл дампа, когда OutOfMemoryError возникает (я бы поспорил, что автор путает эту проблему с какой-то ошибкой JVM, которая привела бы к сохранению дампа ядра).

    Лучшая процедура - создать дамп кучи, используя jmap;это приведет к выводу содержимого кучи в двоичный файл (обычно известный как файл hprof).Затем этот файл может быть проанализирован любым количеством анализаторов:

    • джхат - Инструмент Sun, который анализирует файл hprof, запускает встроенный веб-сервер, чтобы вы могли анализировать кучу через веб-браузер / просматривать отчеты.Я обнаружил, что это очень медленно для больших куч.
    • VisualVM ( Визуализация ) - Потрясающий инструмент отладки / устранения неполадок, поставляемый в комплекте с JDK.Помимо прочего, это также может быть использовано для создания дампа кучи любого запущенного процесса, а также дампа потока.Однако я обнаружил, что загрузка больших файлов hprof также происходит очень медленно.
    • Анализатор памяти Eclipse - Плагин Eclipse, который может генерировать файлы hprof.

    Я бы настоятельно рекомендовал использовать плагин Eclipse, так как он очень быстро загружает большие (> 500 МБ) дампы кучи (менее чем за минуту), создает полезные отчеты, поддерживает язык запросов со сложной логикой и т.д.

    Эта страница объясняет работу с JVM куча свалок. Jhat - более простой, хотя и менее графический способ работы с кучами, но вы также можете загрузить те же файлы дампа в менеджер памяти eclipse. Вы также можете получить некоторую информацию от jvisualvm, если вы используете текущую (1.6) jvm.

    Я обычно предпочитаю профилирование приложений, использующих NetBeans Profiler. Вы можете довольно легко увидеть, какие объекты протекают и где они создаются в большинстве случаев. Вероятно, есть несколько других инструментов, которые будут это делать, но я знаю, что профилировщик NetBeans работает хорошо и прост в использовании.

    Вы можете попробовать использовать Jprobe . Вы можете следить за своим приложением и просматривать объекты по мере их создания. Также это поможет проанализировать, какие объекты не будут собирать мусор, и будут ли указатели двигаться дальше.

    Хотя он не бесплатный, но я помню, что он поставляется с пробной лицензией, поэтому проверьте это.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top