Эта статья переведена с сайта: https://medium.com/@satanjim/how-we-reduced-the-memory-consumption-of-spring-boot-application-over-40-for-the-development-c8a5813fac23.
При разработке базового приложения Spring Boot нам необходимо учитывать доступное потребление памяти. По мере добавления новых зависимостей потребление памяти увеличивается. Для монолитного приложения потребление памяти обычно еще приемлемо, но когда мы разрабатываем несколько микросервисов и запускаем их на локальной машине, это может стать кошмаром и повлиять на эффективность разработки.
И Spring Boot, и JVM имеют некоторые конфигурации по умолчанию, которые подходят для большинства ситуаций, даже в некоторых производственных средах. Но если мы сможем настроить некоторые конфигурации для локальной разработки, мы сможем значительно сократить потребление памяти. Обратите внимание, что я не являюсь экспертом по JVM и Spring Boot и просто хочу поделиться в этой статье своим собственным опытом.
Для начала давайте разберемся, кто потребляет память? Да, это JVM. Но как оно это делает?
Чтобы понять это глубже, нам нужно понять внутренности JVM, но это выходит за рамки данной статьи. Проще говоря, потребление памяти JVM можно разделить на кучу, метапространство, стек каждого потока (Thread Stack) и другие.
потребление памяти
Чтобы уменьшить потребление память, нам нужно JVM Передайте некоторые параметры явно.
Для начала нам необходимо сделать некоторые предварительные приготовления:
Далее мы можем настроить некоторые параметры. Создайте файл с именем «dev.jvm.conf» и введите следующие значения (позже мы объясним, что означают эти значения):
# dev.jvm.conf
# Переопределить свойства приложения
SERVER_TOMCAT_ACCEPT_COUNT=3
SERVER_TOMCAT_MAX_CONNECTIONS=3
SERVER_TOMCAT_THREADS_MAX=3
SERVER_TOMCAT_THREADS_MIN_SPARE=1
SPRING_MAIN_LAZY_INITIALIZATION=true
# Установить параметры JVM
JAVA_TOOL_OPTIONS=-XX:+UseSerialGC -Xss512k -XX:MaxRAM=200m
Затем мы используем docker-compose для передачи этих переменных среды в контейнер:
# docker-compose.yml
services:
service1:
image: service1:dev
env_file:
- dev.jvm.conf
service2:
image: service2:dev
env_file:
- dev.jvm.conf
现在运行docker-compose up
Заказ,Вы должны увидеть некоторые различия.
Прежде чем начать, имейте в виду, что снижение определенных значений не приведет напрямую к снижению использования памяти в вашей локальной среде, в которой обычно не так много запросов. Наша цель при добавлении порога — ограничить количество запросов, если мы начнем получать больше запросов, даже в локальной среде. В конечном итоге это поможет ограничить использование памяти.
Вот несколько простых настроек,Но их можно значительно сократить за счет разработки потребления памяти в местной среде. конечно,Исходя из вашей конкретной ситуации,Возможно, вам придется внести дополнительные корректировки. Это всего лишь отправная точка,Вы можете оптимизировать в соответствии с фактическими потребностями.
В общем, при правильной настройке JVM и Spring Boot,и понятьпотребление Принцип памяти: мы можем уменьшить локальную окружающую среду разработкиизпотребление память, повысить эффективность работы. Надеюсь, эти советы будут полезны!