как увеличить размер кучи Java навсегда - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь увеличить объем памяти кучи Java на нашем производственном сервере. Вот два пути, которыми я пытаюсь.

Путь 1

Я попробовал следующий ответ по этой ссылке. Я установил Java-память с помощью следующей команды.

export _JAVA_OPTIONS="-Xmx10g"
java -XshowSettings:vm 

Таким образом, размер кучи Java не увеличивается постоянно.

Путь 2

Я попробовал этот ответ. Я попытался увеличить размер кучи Java с помощью следующей команды.

java -XX:+PrintFlagsFinal -Xms5240m -Xmx10240m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m  -version | grep -iE 'HeapSize|PermSize|ThreadStackSize

Таким образом, размер кучи Java не увеличивается постоянно.

Заключение

Таким образом, мне не удалось изменить размер кучи Java навсегда. Итак, как я могу навсегда изменить размер кучи Java? Пожалуйста, предложите мне способ. Заранее спасибо.

Обновлено:

Здесь я хочу обозначить следующее значение словом «навсегда».

Значение: если я запускаю следующую команду, то я хочу видеть размер кучи одинаковым при каждом открытии оболочки.

java -XX:+PrintFlagsFinal -version | grep -iE'HeapSize|PermSize|ThreadStackSize'   

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Просто настройте аргументы памяти в нужном вам экземпляре Java. Каждый экземпляр Java имеет само пространство jvm.

0 голосов
/ 06 сентября 2018

Поскольку вы помечаете вопрос как "tomcat", я не согласен с ответом, который вы опубликовали. Или, по крайней мере, с применимостью этого ответа: когда tomcat запускается, вы хотите установить определенные параметры. Когда вы настраиваете любой процесс Java, который когда-либо начинает иметь эти параметры, вы настраиваете себя на случай аварии:

Когда вы выключаете tomcat, он запускает очень недолговечный процесс Java, который подключается к работающему серверу, сигнализирует о его завершении, а затем завершает работу. Для этой операции вам не нужна какая-либо конкретная память, скорее, она может завершиться неудачей, если у вас нет 5 ГБ свободной памяти (-Xms5000m), когда вы хотите выключить tomcat.

Если вы запустите jconsole для проверки компонентов JMX Tomcat, чтобы увидеть, что происходит, вам снова понадобится 5G. И для любого другого маленького Java-инструмента, который будет работать на вашем компьютере и который вы даже не знаете о пока . (поскольку вы делаете настройку действительно глобальной: Любой процесс, который любой пользователь запускает, может навязать эти огромные требования к ресурсам.

Что теперь делать вместо этого?

Для tomcat в среде Linux (вы помечаете «redhat»), создайте файл в tomcat's bin/setenv.sh и установите переменную CATALINA_OPTS, например.

CATALINA_OPTS="$CATALINA_OPTS -Xms5000m -Xmx5000m"

Если Tomcat работает как демон, возможно, лучше использовать этот параметр в других местах.

Для завершения, даже если вы не помечаете Windows: для Windows сделайте аналог в bin / setenv.bat. Эти файлы не являются частью дистрибутива Tomcat, например, они не будут перезаписаны при обновлении. Но если они там, они будут приняты во внимание. Для служб Windows используйте конфигурацию службы для соответствующих настроек

Еще одна рекомендация: для сервера production вы должны установить для -Xms то же значение, что и для -Xmx. Причина: если максимальный объем памяти недоступен при запуске, вы должны выяснить это немедленно, а не в воскресенье вечером в 3 часа ночи, когда JVM решит, что она хотела бы иметь больший кусок вашей памяти.

0 голосов
/ 05 сентября 2018

После 4-часового запроса я нашел следующее решение. Чтобы изменить общесистемный профиль, перейдите в / etc / profile. В качестве альтернативы вы можете запустить следующую команду.

 1. vi /etc/profile
 2. export  _JAVA_OPTIONS="-Xms5000m -Xmx12000m"

Чтобы проверить объем памяти кучи Java, выполните следующую команду:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Эта команда выводит следующее на моем компьютере.

Picked up _JAVA_OPTIONS: -Xms5000m -Xmx12000m
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 5242880000                          {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 12582912000                         {product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

Вы можете найти следующий урок очень полезным.

https://www.mkyong.com/java/find-out-your-java-heap-memory-size/

...