Знания меняют судьбу, программирование делает меня счастливым, и я продолжу шагать в мире открытого исходного кода в 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