SpringBoot настроен таким образом, чтобы ваш проект летал!

Java

предисловие

Как инженер, настройка проекта - это то, что нужно освоить.

В проекте SpringBoot настройка в основном осуществляется посредством конфигурационных файлов и параметров JVM.

Изменить файл конфигурации

Об изменении конфигурационного файла application.properties.

Подробная документация по модификации конфигурационного файла для проекта SpringBoot

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties

Среди наиболее важных из них:

server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.
server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.
server.tomcat.max-threads=0 # Maximum number of worker threads.
server.tomcat.min-spare-threads=0 # Minimum number of worker threads.

Настройка JVM

На официальном сайте Oracle есть руководство по настройке JVM:

https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060

Если вам интересно, вы можете пойти и посмотреть.

Практика настройки JVM

Когда параметр JVM не установлен

У меня сейчас есть проект, и по умолчанию параметры JVM не заданы.

Позвольте мне начать и посмотреть.

Взгляните на распределение стека:

Очевидно, что максимальная память кучи по умолчанию составляет 8 ГБ. Явно неразумно.

''Теперь давайте установим параметры JVM

Например, чтобы настроить такой большой набор параметров для JVM:

-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m -Xmx1024m -Xmn256m
-Xss256k -XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC

метод первый:

Если вы используете инструменты разработки, такие как IDEA, для запуска и запуска проекта, гораздо удобнее отлаживать JDK.

Просто установите значение параметра в параметрах виртуальной машины.

Настройка прошла успешно, и мои журналы GC и распределение стека в порядке.

Журнал GC:

распределение стека:

Способ второй:

Он подходит для настройки, когда проект развернут, когда он запущен и когда он запускается с помощью скрипта или командной строки.

Во-первых, в пути к проекту упакуйте проект:

Очистите старые проекты

mvn clean

Упакуйте новый проект:

mvn package -Dmaven.test.skip=true

После завершения упаковки введите путь к исполняемому пакету Jar:

Выполните операцию, чтобы начать настройку параметров JVM.

$ java -jar -XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m -Xmx1024m -Xmn256m -Xss256k
-XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC newframe-1.0.0.jar

В это время, если вы снова посмотрите на мониторинг, вы обнаружите, что он уже в порядке.

Стек запускается в соответствии с параметрами JVM, установленными при запуске.

Значение параметров JVM этих настроек см. в официальном документе по настройке, предоставленном оракулом на втором этапе.

Вот краткое описание:

  • -XX:MetaspaceSize=128m (размер метапространства по умолчанию)

  • -XX:MaxMetaspaceSize=128m (максимальный размер метапространства)

  • -Xms1024m (максимальный размер кучи)

  • -Xmx1024m (размер кучи по умолчанию)

  • -Xmn256m (размер нового поколения)

  • -Xss256k (размер максимальной глубины стека)

  • -XX:SurvivorRatio=8 (соотношение разделов нового поколения 8:2)

  • -XX:+UseConcMarkSweepGC (указать используемый сборщик мусора, здесь используется сборщик CMS)

  • -XX:+PrintGCDetails (печатать подробные журналы GC)

Очки знаний:

  • После JDK8 -XX:PermSize и -XX:MaxPermGen были удалены и заменены на -XX:MetaspaceSize=128m (размер метапространства по умолчанию) -XX:MaxMetaspaceSize=128m (максимальный размер метапространства)

  • JDK 8 начал помещать метаданные класса в локализованную память кучи (native heap).Эта область называется Metaspace, а китайское название — Metaspace.

  • Каковы преимущества использования локализованной памяти? Наиболее прямым проявлением является java.lang.OutOfMemoryError: проблема пространства PermGen больше не будет существовать, поскольку выделение метаданных класса по умолчанию ограничено только размером локальной памяти, то есть тем, сколько локальной памяти осталось в Теория, насколько большим может быть Metaspace (Кажется, емкость связана еще и с виртуальной памятью операционной системы? Здесь не ясно), что решает проблему нехватки места.

  • Однако сделать метапространство бесконечным, очевидно, нереально, поэтому мы также ограничим размер метапространства: используйте параметр -XX:MaxMetaspaceSize, чтобы указать размер области метапространства. По умолчанию JVM динамически устанавливает размер MaxMetaspaceSize во время выполнения по мере необходимости.

На более интересные статьи можно обратить внимание: паблик-аккаунт WeChat, место сбора java-программистов.