7 наиболее распространенных ошибок при установке размера Java Heap
Оригинал: "6 Common Errors in Setting Java Heap Size" (кажется, автор несколько ошибся в подсчетах)
Перевод: Владимир Русинов
Для установки размера кучи java (heap) используются две опции: -Xmx для установки максимального размера и -Xms для начального(минимального) размера. Вот наиболее часто встречающиеся ошибки их использования:
1. Отсутствие m, M, g или G в конце (регистр не имеет значения). Например:
java -Xmx128 BigApp java.lang.OutOfMemoryError: Java heap space
Правильная команда должна быть такой: java -Xmx128m BigApp. Строго говоря, -Xmx128 корректная настройка для очень маленьких приложений (например HelloWorld), но я думаю в большинстве случаев все-таки имелось в виду -Xmx128m.
2. Лишний пробел или использование =. Например:
java -Xmx 128m BigApp Invalid maximum heap size: -Xmx Could not create the Java virtual machine.
java -Xmx=512m HelloWorld Invalid maximum heap size: -Xmx=512m Could not create the Java virtual machine.
Правильная команда должна иметь вид java -Xmx128m BigApp, без пробела или знака =. -X опции ведут себя отлично от -Dключ=значение опций, в которых используется =.
3. Установка только -Xms в значение большее чем максимальный размер кучи по умолчанию (64m). Похоже что минимальный размер кучи по умолчанию равен 0.
Пример:
java -Xms128m BigApp Error occurred during initialization of VM Incompatible initial and maximum heap sizes specified
Корректная команда должна выглядеть так: java -Xms128m -Xmx128m BigApp. Установить минимальный и максимальный размер равными - хорошая идея. В любом случае, минимальное значение не должно превышать максимальное.
4. Установка размера кучи большего чем объем доступной физической памяти. Пример:
java -Xmx2g BigApp Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
Устанавливайте размер кучи меньше чем размер физической памяти: java -Xmx1g BigApp
5. Использование mb в качестве единицы измерения, вместо m или M.
java -Xms256mb -Xmx256mb BigApp Invalid initial heap size: -Xms256mb Could not create the Java virtual machine.
6. Установка размера кучи в большее значение, чем позволяет JVM. Пример:
java -Xmx256g BigApp Invalid maximum heap size: -Xmx256g The specified size exceeds the maximum representable size. Could not create the Java virtual machine.
Укажите размер поменьше: java -Xmx256m BigApp
7. Указание дробного чиста в качестве значения. Пример:
java -Xmx0.9g BigApp Invalid maximum heap size: -Xmx0.9g Could not create the Java virtual machine.
Правильная команда должна выглядеть так:java -Xmx928m BigApp
PS:
Как установить размер кучи(heap) в Tomcat?
Остановите сервер Tomcat, установите переменную окружения CATALINA_OPTS, затем запустите Tomcat снова. Смотрите файлы tomcat-install/bin/catalina.sh или catalina.bat чтобы узнать как используется эта переменная окружения.
Примеры:
set CATALINA_OPTS=-Xms512m -Xmx512m (Windows, значение не в кавычках)
export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash, значение в кавычках)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh, значение в кавычках)
Просмотрев catalina.bat или catallina.sh, вы можете заметить что для установки JVM опций использутся CATALINA_OPTS, JAVA_OPTS или и то и другое. В чем же различие между CATALINA_OPTS и JAVA_OPTS? Имя CATALINA_OPTS специфично именно для Tomcat, а JAVA_OPTS может использоваться и в других java приложениях (например Jboss). Так как переменные окружения как правило устанавливаются глобально, Вы можете использовать это CATALINA_OPTS задания опций для Tomcat, и JAVA_OPTS - для опций других приложений.
Я предпочитаю использовать CATALINA_OPTS.
Как установить размер кучи в JBoss?
Остановите Jboss, отредактируйте значения в файле $JBOSS_HOME/bin/run.conf, запустите сервер. Вы можете изменить (или добавить если ее там нет) значение переменной JAVA_OPTS например на такое: JAVA_OPTS="-server -Xms128m -Xmx128m"
Как установить размер кучи в Eclipse?
Запускайте Eclispe с ключем "-vmargs <ваши опции>". Все опции после -vmargs будут интерпретированы как опции JVM.
Пример:
eclipse -vmargs -Xms64m -Xmx256m
Это установит опции для Eclipse, но не для приложения которое Вы разрабатываете в eclipse. Для того чтобы поменять опции приложения, используйте Run As -> Open Run Dialog -> (x)=Arguments -> VM Arguments
Как установить размер кучи в NetBeans?
Закройте NetBeans, отредактируйте файл netbeans-install/etc/netbeans.conf. Пример:
netbeans_default_options="-J-Xms512m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=128m -J-Xverify:none
Как установить размер кучи в Apache Ant?
Установите переменную окружения ANT_OPTS. Примеры:
set ANT_OPTS=-Xms512m -Xmx512m (Windows)
export ANT_OPTS="-Xms512m -Xmx512m" (ksh/bash)
setenv ANT_OPTS "-Xms512m -Xmx512m" (tcsh/csh)
Как установить размер кучи в JavaEE SDK/J2EE SDK/Glassfish/Sun Java System Application Server?
Остановите сервер приложений, откройте $GLASSFISH_HOME/domains/domain1/config/domain.xml, найдите там XML элемент с именем java-config -> jvm-options. Пример:
<java-config suffix="..."> <jvm-options>-Xmx512m</jvm-options> <jvm-options>-XX:NewRatio=2</jvm-options> <jvm-options>-XX:MaxPermSize=128m</jvm-options> ... </java-config>
Также вы можете изменять опции через веб-интерфейс администратора, обычно http://localhost:4848/, или https://localhost:4848/. Откройте Application Server в верхней части левой панели, затем на правой панели откройте JVM Settings -> JVM Options, и Вы увидите список текущих опций. Вы можете добавить новые или изменить существующие.
Еще один способ - использование cli комманды. Смотрите справку:
./asadmin help create-jvm-options ./asadmin help delete-jvm-options

Установка размера кучи в большее значение, чем позволяет JVM
Вопрос - если надо дать кучу больше чем позволяет JVM то как быть?
Есть где-то список версий с ограничениями?
Списка не видел, но я
Списка не видел, но я конкретно с такой ошибкой сталкивался когда 32-битной JVM пытался дать больше 4 Гб памяти. Естественно 64-битная эту проблему решила.
Intellij IDEA
для самой идеи
%IDEA_HOME%\bin\idea.exe.vmoptions
-Xms512m
-Xmx512m
для модуля проекта
Run/Debug Configuration > %настраиваемый модуль% > Runner > VM parameters
Хоть какая-то аргументация
Хоть какая-то аргументация того, почему нельзя устанавливать размер heap больше объема имеющейся физической памяти, есть ?
Есть. Java просто не сможет
Есть. Java просто не сможет столько памяти выделить.
7 наиболее распространенных ошибок....
Для FreeBSD:
tomcat55_java_opts="-Xms256M -Xmx256M"
tomcat55_java_home="/usr/local/jdk1.6.0"
Спасибо
Помогло
Oem sfoftware at most skilfully prises
Cadence Allegro PCB Design 16.2 (3 cds) at our soft shop
Отправить комментарий