Как постоянно увеличивать размер кучи java

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

Способ 1

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

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

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

Способ 2

Я пробовал этот ответ.I попытался увеличить размер кучи 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'   

Что значит permanently?

Jens 05.09.2018 13:16

См. Обновленные вопросы.

A Stranger 05.09.2018 13:19

Вы читали stackoverflow.com/questions/28327620/…

Jens 05.09.2018 13:20

Я действительно не знаю ответ, отправленный вами.

A Stranger 05.09.2018 13:33

Вы не можете - изменить скрипт, запускающий ваш сервер.

stdunbar 07.09.2018 04:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
5
2 374
4

Ответы 4

После 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/

Я объект сильно. Хотя это технически правильно, вы не хотите делать этого в своей системе: см. Мой альтернативный ответ.

Olaf Kock 06.09.2018 09:46

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

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

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

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

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

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

CATALINA_OPTS = "$CATALINA_OPTS -Xms5000m -Xmx5000m"

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

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

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

Могу ли я запустить сервер tomcat с помощью ./startup.sh после установки параметра в bin / setenv.sh? Или мне нужно запустить сервер tomcat с помощью ./catalina.sh?

A Stranger 06.09.2018 10:29

Да, конечно. startup.sh в конце вызывает catalina.sh, а catalina.sh встраивает setenv.sh (если он существует). Так что и ./startup.sh, и ./catalina.sh run работают.

Olaf Kock 06.09.2018 12:09

Вторая веская причина для установки одного и того же значения -Xms и -Xmx в стабильной (производственной) среде - это эффективность / производительность; если вы в конечном итоге собираетесь расширить до -Xmx, вы можете сразу же захватить эту память, а не получать ее динамически по мере необходимости.

skomisa 18.09.2018 05:41

На Rhel7 или CentOS7 вам следует изменить /usr/lib/systemd/system/tomcat.service:

Environment = "CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

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