Настройки памяти Eclipse при получении "Java Heap Space" и "Out of Memory"

При попытке запустить и запустить проект flex/java в eclipse я продолжал получать "Exception of Memory Exception" и "Java Heap Space", используя Eclipse, Tomcat и JRE.

Во время исследования попыток настроить параметры памяти я нашел три места для их настройки:

  • eclipse.ini

  • Настройки JRE в Окне> Настройки

  • Catalina.sh или Catalina.bat

Каковы различия между установкой -xms и -xmx в этих разных местах и ​​что это значит?

Есть ли способ убедиться, что эти параметры памяти установлены соответствующим образом?

Каковы оптимальные параметры -xms и -xmx для компьютера с 2 ГБ ОЗУ?

Любые другие советы памяти?

Благодарю.

11 ответов

Решение

-xms - это начальная память (при запуске виртуальной машины), -xmx - максимальная память для виртуальной машины.

  • eclipse.ini: память для виртуальной машины, на которой выполняется eclipse
  • установка jre: память для java-программ запускается из eclipse
  • catalina.sh: память для вашего сервера Tomcat

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

Это могло быть:

  1. Самозатмение (в чем я сомневаюсь)
  2. Ваше приложение под Tomcat

Параметры JVM -xms а также -xmx представляют "начальную память" кучи и "максимальную память". Забудьте о "начале памяти". Это не поможет вам сейчас, и вы должны изменить этот параметр, только если вы уверены, что ваше приложение будет быстро потреблять этот объем памяти.

В производстве, я думаю, что единственный параметр, который вы можете изменить, это -xmx в файлах Catalina.sh или Catalina.bat. Но если вы тестируете свое веб-приложение непосредственно из Eclipse с настроенной средой отладки Tomcat, вы можете просто перейти к "Конфигурациям отладки"> "Apache Tomcat"> "Аргументы"> "Аргументы виртуальной машины" и установить -xmx там.

Что касается оптимального -xmx для 2 ГБ это зависит от вашей среды и количества запросов, которые может принять ваше приложение. Я хотел бы попробовать значения от 500 МБ до 1 ГБ. Проверьте ограничение "зоны" виртуальной памяти вашей ОС и ограничение самой JVM.

Нашли 2 вопроса в нашем случае.

  1. Память остановилась, и мы в обязательном порядке установили более высокий размер запуска при запуске. Я предполагаю, что он использовал память быстрее, чем мог выделить ее. В нашем случае. -XX:PermSize=256 м. -XX:MaxPermSize=256 м.

  2. Мы используем Clearcase, а в Eclipse был использован плагин от Rational Clearcase SCM (7.0.0.2). Плагин был причиной того, почему Eclipse потерпел крах. И на данный момент мы не знаем, почему, но было бы полезно узнать для других. Был вынужден отключить его.

Tomcat в Eclipse не использует catalina.sh или bat. Для настройки памяти для управляемого Tomcat используйте настройки виртуальной машины в конфигурации запуска сервера

Мой FLashBuilder постоянно падает, когда я пытаюсь выпустить новую версию, или я злоупотребляю функциями "Отметить события" и "Связь с редактором".

Я значительно улучшил свою производительность флэш-памяти, выполнив следующие действия: http://www.redcodelabs.com/2012/03/eclipse-speed-up-flashbuilder/

Особенно, установив FlashBuilder.ini в следующую конфигурацию

-vm
C:/jdk1.6.0_25/bin
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
–launcher.XXMaxPermSize
256m
–launcher.defaultAction
openFile
-vmargs
-server
-Dosgi.requiredJavaVersion=1.5
-Xmn128m
-Xms1024m
-Xmx1024m
-Xss2m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+UseParallelGC

Моя аппаратная конфигурация - процессор Intel i3, 4 ГБ DDR3, Windows 7 64-бит.

Есть несколько различных настроек памяти по понятной причине.

Настройка памяти eclipse заключается в том, что Eclipse - это большая Java-программа. если в нескольких проектах у вас будет открыто огромное количество файлов, то вы захотите дать Eclipse больше оперативной памяти. Это проблема только в "корпоративных" системах, обычно личные проекты не используют столько файловых дескрипторов или интерфейсов.

Параметр JRE - это количество оперативной памяти, чтобы разрешить Java-среду выполнения при запуске проекта. Это, вероятно, тот, который вы хотите, когда вы запускаете какое-то приложение для захвата памяти. Я управлял математическими проектами, которые требовали нескольких выступлений оперативной памяти, и я действительно должен был сказать JRE, что все в порядке, JVM продолжал предполагать, что моя программа находилась в состоянии утечки, но я делал это нарочно, и должен был сказать JVM в частности, что было разрешено использовать.

Тогда настройка памяти Catalina для сервера приложений Tomcat. Этот сервер нуждается в памяти для каждого приложения и одновременных пользователей. Это сочетается с номером JRE, потому что ваш проект может быть веб-приложением, и я не уверен, кому нужно память.

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

В логах есть информация:

Heap
 def new generation   total 36352K, used 11534K [0x10040000, 0x127b0000, 0x14f00000)
  eden space 32320K,  29% used [0x10040000, 0x10994c30, 0x11fd0000)
  from space 4032K,  49% used [0x123c0000, 0x125aed80, 0x127b0000)
  to   space 4032K,   0% used [0x11fd0000, 0x11fd0000, 0x123c0000)
 tenured generation   total 483968K, used 125994K [0x14f00000, 0x327a0000, 0x50040000)
   the space 483968K,  26% used [0x14f00000, 0x1ca0ab38, 0x1ca0ac00, 0x327a0000)
 compacting perm gen  total 58112K, used 57928K [0x50040000, 0x53900000, 0x60040000)
   the space 58112K,  99% used [0x50040000, 0x538d2160, 0x538d2200, 0x53900000)
No shared spaces configured.

Даже если я настрою eclipse.ini, чтобы использовать эти значения, похоже, он не применяется.

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
1024M
-framework
plugins\org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:MaxPermSize=256m
-Xms512m
-Xmx1024m

Кто-нибудь видел эту проблему раньше?
Добавлю, что используемый проект очень большой.

У меня есть эти настройки:

-vmargs
...
-Duser.name=...
-XX:PermSize=256m
-XX:MaxPermSize=256m
-Xmn128m
-Xms256m
-Xmx768m

Затмение случайно разбилось, прежде чем я установил PermSize равным MaxPermSize.

Мы столкнулись с проблемой кучи пространства в Ant, пытаясь создать очень большой проект Flex, который не мог быть решен путем увеличения памяти, выделенной для Ant, или путем добавления параметра fork=true. Это привело к ошибке в Flex 3.4.0 SDK. Я наконец понял это после опроса разработчиков для их версии SDK и возврата к 3.3.0.

Для любопытных.

Я отследил ошибку до файла интерфейса, в котором была добавлена ​​дополнительная пара средств доступа "get / set maskTrackSkin". Ошибка пространства кучи ударила, если какие-либо дополнительные функции были добавлены к интерфейсу и, что еще хуже, интерфейс не был в проекте, который получал ошибку пространства кучи. Надеюсь, это кому-нибудь поможет.

Adobe Flash Builder 4.6 Read Me.pdf рекомендует отредактировать файл eclipse.ini для своего экземпляра Eclipse, чтобы он включал следующие параметры:

-vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m

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

В Java это означает, что вы храните ссылку на объект где-либо, даже если он вам больше не нужен. Распространенными причинами этого являются забывчивость вызова close() для ресурсов (файлов, соединений с БД, операторов и наборов результатов и т. Д.).

Если вы подозреваете утечку памяти, используйте профилировщик, чтобы определить, какой объект занимает всю доступную память.

Другие вопросы по тегам