предисловие
Как инженер, настройка проекта - это то, что нужно освоить.
В проекте SpringBoot настройка в основном осуществляется посредством конфигурационных файлов и параметров JVM.
1. Измените файл конфигурации
Об изменении конфигурационного файла 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.
2. Настройка JVM
Существует руководство по настройке JVM на официальном сайте Oracle.
Если вам интересно, вы можете пойти и посмотреть.
3. Практика настройки JVM
1. Когда параметры JVM не заданы
У меня сейчас есть проект, и по умолчанию параметры JVM не заданы.
Позвольте мне начать и посмотреть.
Взгляните на распределение стека:
Очевидно, что максимальная память кучи по умолчанию составляет 8 ГБ. Явно неразумно.
2. Зададим параметры 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 во время выполнения по мере необходимости.
Что ж, желаю всем успехов в учебе и работе!
наконец
Прошу всех обратить внимание на мой официальный аккаунт [Программист в погоне за ветром], в нем будут обновляться статьи, а также размещаться отсортированная информация.