найти причину чрезмерного использования памяти в jvm 8

1

Моя фактическая проблема заключается в том, что в настоящее время netbeans использует около 4G (в соответствии с Activity Monitor на OS X) памяти. Я установил несколько вариантов ограничения памяти безрезультатно. из моего netbeans.conf

netbeans_default_options="-J-client -J-Xmx1G -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxMetaspaceSize=256m -J-XX:+UseConcMarkSweepGC -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"

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

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

Вот некоторые вещи, которые я обнаружил из дампа кучи visualvm

  File size: 364.7 MB      Total bytes: 332,921,516     Total classes: 24,143     Total instances: 4,151,139     Classloaders: 3,272     GC roots: 65,185     Number of objects pending for finalization: 0 

он показал график, который показал, что он зарезервировал приблизительно 600 М для кучи и 150 М для метапасмы. В то время монитор активности показывал около 2 Гб памяти. То, что я пытаюсь понять, - это использование всего 1G памяти. Если бы это было несколько сотен мегабайт, это было бы терпимо, но 2-4 ГБ RAM было половиной системной памяти (также отмечая, что оно не ведет себя таким образом в моем ящике Linux с теми же версиями). Я бы подумал, что где-нибудь от 800M-2G, вероятно, будет нормальным для java-среды IDE, и было бы терпимо, и я бы не стал расследовать это, используя остальную доступную память, без какой-либо заметной причины, которая заставляет меня хотеть чтобы узнать, что именно, и почему это резервирует это.

Изображение 174551

Обновление: это утечка памяти в Swing на OS X в JVM 8. Я не могу принять ответ, который не смог бы довести меня до точки определения причины проблемы в jdk 8.

  • 0
    Первый шаг - найти условия, при которых потребление памяти недопустимо. Это может быть конкретный проект или действие, такое как компиляция, поиск использования и т. Д. Второй шаг, если у вас нет подсказок - профилирование сетевых компонентов, но, скорее всего, вы не получите никакой полезной информации. Также может случиться так, что ваше приложение открылось в NetBeans с использованием некоторого собственного кода, который подвержен утечкам памяти.
  • 0
    Определите «использование» специально. Для приложения не редкость, когда mmap отображается в разделяемые библиотеки на гигабайтах, что 1) фактически не является резидентом и 2) используется совместно с множеством других работающих приложений.
Показать ещё 2 комментария
Теги:
java-8
debugging
memory-leaks
jvm

1 ответ

2

JDK поставляется с инструментами. Запустите% JAVA_HOME%\bin\jvisualvm.exe и проверьте свой экземпляр. Вы должны иметь возможность выполнять heapdump и анализировать использование.

  • 0
    он говорит мне, что куча выделена примерно на 600 МБ, а метапространство - около 150, что значительно меньше, чем 2,85, который, как сообщается, используется ОС ... в настоящее время около 2 ГБ памяти не учтено.
  • 0
    Проверьте другие запущенные процессы. JVisualVM не лжет вам.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню