предисловие
Как инженер, настройка проекта - это то, что нужно освоить.
В проекте 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
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-программистов.