Основы SpringBoot2.x: фоновый запуск Linux с Jar и настройка параметров JVM

Spring Boot

Знания меняют судьбу, программирование делает меня счастливым, и я продолжу шагать в мире открытого исходного кода в 2020 году.

Ставьте лайк и смотрите снова, формируйте привычку

дай мне звезду,Нажмите, чтобы узнать о решении для посадки службы компонентного интерфейса на основе SpringBoot.

Мы упаковываем приложение, написанное какJarПосле исполняемого файла, если вLinuxВ серверной среде его можно использовать напрямуюjava -jar xxx.jarкоманда для запуска приложения, но когда мы закрываем командное окно启动中Приложение также остановится, так как же нам нужно запустить его в качестве фоновой службы?

команда nohup

Linuxсистема илиOS XОба предоставляют команду для решения приложения, работающего в фоновом режиме, то естьnohup, мы можем использовать эту команду, чтобы напрямую执行的任务Установить вФоновый процесс, когда вы хотите остановить бег, вам нужно пройти конецpidметод, использование заключается в следующем:

➜  developing-first-application git:(2.x) ✗ nohup java -jar target/service-application-0.0.1-SNAPSHOT.jar &
[1] 2349
appending output to nohup.out

После выполнения вышеуказанной команды мы видим, что консоль выводит текущую запущенную программу.PIDза2349, мы можем использоватьkillкоманда убить этоPID, чтобы добиться эффекта завершения процесса.

Меры предосторожности:appending output to nohup.outЭто предложение очень нужно понять, чтобы знать, что мы прошлиjava -jar xxx.jarПри непосредственном запуске приложения лог выполнения будет выводиться в консоль.nohupКажется, мы не находим вывод лога при запущенном режиме Куда пропал лог?

журнал выполнения

когда ты видишьappending output to nohup.outКогда это предложение выводится на консоль, можно предположить, что содержимое журнала было выведено в файл с именемnohup.outфайл, расположение файла - нашеРодственный каталог для запуска команды nohup(注意:不是jar文件的目录), мы можем пройтиtail -1000f nohup.outКоманда для просмотра содержимого журнала выполнения, как показано ниже:

➜  developing-first-application git:(2.x) ✗ tail -1000f nohup.out 

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)
 ...
 2020-02-21 14:31:42.614  INFO 2349 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-02-21 14:31:42.617  INFO 2349 --- [           main] o.m.c.d.f.a.DevelopingFirstApplication   : Started DevelopingFirstApplication in 1.437 seconds (JVM running for 1.75)

пройти черезnohupЖурналы, сгенерированные выполненной командой, будут выведены по умолчанию.nohup.outвнутри файла.

указать файл журнала

На одном сервере и в одном каталоге может быть несколько программ, которые необходимо запустить.JarЧтобы различать вывод журнала каждого приложения, нам нужно указать имя файла вывода журнала следующим образом:

➜  developing-first-application git:(2.x) ✗ nohup java -jar target/service-application-0.0.1-SNAPSHOT.jar &> service-application-0.0.1.log & 
[1] 2579

В это время мыnohupВ каталоге того же уровня, где выполняется команда, вы можете увидеть, что файл с именемservice-application-0.0.1.logжурнальный файл.

Рекомендация: Формат имени лог-файла:Service ID + Service Version,такой жеServiceIDМогут быть ситуации, когда развернуты разные версии служб.

Режим JVM-сервера

существуетJVMСуществует понятие шаблона, которое обычно используется в среде разработки.clientрежим, но обычно используется на рабочих серверахserverрежим, как мы выбираем?

Рекомендуемая среда разработки для использованияclientрежим, потому что он запускается быстро и можетулучшатьчасть开发效率, экономя время запуска каждого проекта, а производственную среду рекомендуется использоватьserverрежим, используемый внутри страны под кодовым названиемC2изтяжеловесный компилятор, так что хотя приложение启动速度有所提高,но编译的比较彻底, служба запускается относительноclientболее высокая производительность.

установить с помощьюserverШаблон также относительно прост, нам нужно только выполнитьjava -serverкоманда следующим образом:

➜  developing-first-application git:(2.x) ✗ nohup java -server -jar target/service-application-0.0.1-SNAPSHOT.jar &> service-application-0.0.1.log &
[1] 2707

Исходная память (-Xms)

JVMсуществуетclientработать в режиме, по умолчаниюXmsразмер1M, пока вserverрежим по умолчаниюXmsразмер128M, вы можете изменить распределение в соответствии с реальной ситуацией следующим образом:

➜  developing-first-application git:(2.x) ✗ nohup java -server -Xms256M -jar target/service-application-0.0.1-SNAPSHOT.jar &> service-application-0.0.1.log &
[1] 2846

пройти через-Xms256M, измените инициализированную выделенную память на256M.

максимальная память (-Xmx)

JVMсуществуетclientработать в режиме, по умолчаниюXmxразмер64M, пока вserverрежим по умолчаниюXmxразмер1024M, вы можете изменить распределение в соответствии с реальной ситуацией следующим образом:

➜  developing-first-application git:(2.x) ✗ nohup java -server -Xms256M -Xmx2048M -jar target/service-application-0.0.1-SNAPSHOT.jar &> service-application-0.0.1.log &
[1] 2340

пройти через-Xmx2048M, измените максимальную выделенную память на2048M.

Скрипт настройки JVM

JVMНастройка особенно актуальна, конфигурация сервера ограничена, а ресурсы, которые можно использовать, нужно беречь и вносить наибольший вклад! ! !

Для удобства развертывания службы каждый раз я инкапсулировал команду запуска службы и назвал ее какboot-jar.sh, содержание следующее:

#!/bin/bash
# author 恒宇少年 - 于起宇
# http://blog.yuqiyu.com
nohup java -server -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms256m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -jar "$1" > "$1.log" 2>&1 &
tail -1000f "$1.log"

использоватьtouch boot-jar.shСоздайте сценарий запуска, скопируйте вышеуказанное содержимое в сценарий после создания и передайтеchmod u+x boot-jar.shКоманда изменяет разрешения на исполняемый файл.

boot-jar.shСкрипт используется следующим образом:

➜  developing-first-application git:(2.x) ✗ ./boot-jar.sh target/service-application-0.0.1-SNAPSHOT.jar

С момента добавления скриптаtailкоманда, рабочий журнал будет автоматически выводиться после запуска приложения.

предложение:boot-jar.shРасположение скрипта запуска приложения должно быть размещено в том жеJarв том же каталоге.


автор личноблог

Используйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API