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

При попытке запуска и запуска проекта flex/java в eclipse я продолжал получать "исключение из памяти" и "пространство кучи Java" с использованием Eclipse, Tomcat и JRE.

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

  • eclipse.ini

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

  • Catalina.sh или Catalina.bat

В чем разница между установкой -xms и -xmx в этих разных местах, а что значит?

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

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

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

Спасибо.

Ответ 1

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

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

Ответ 2

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

Это может быть:

  • Eclipse (что я сомневаюсь)
  • Ваше приложение в Tomcat

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

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

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

Ответ 3

В нашем случае найдено 2 вопроса.

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

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

Ответ 4

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

Ответ 5

My FLashBuilder постоянно сбой, когда я пытаюсь выпустить новую версию, или я злоупотребляю функциями "Mark Occurrences" и "Link with editor".

Я значительно улучшил свою производительность вспышки, выполнив следующие шаги 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 cpu, 4 ГБ DDR3, Windows 7 64Bit.

Ответ 6

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

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

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

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

Ответ 7

Также есть некоторые проблемы с памятью в 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

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

Ответ 8

У меня есть следующие настройки:

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

Eclipse случайно разбился до того, как я установил PermSize равным MaxPermSize.

Ответ 9

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

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

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

Ответ 10

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

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

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

Ответ 11

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

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