SpringBoot2.x基础篇:Linux后台运行Jar以及Jvm参数调优

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们将编写的应用程序打包为`Jar`可执行文件后,如果在`Linux`服务器环境下,可直接使用`java -jar xxx.jar`命令运行应用程序,不过当我们关闭命令窗口后`启动中`的应用程序也会停止,那我们需要通过什么方式才可以成为后台服务方式运行呢?

我们将编写的应用程序打包为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

我们通过以上的命令执行后可以看到控制台输出了本次运行程序的PID2349,我们可以使用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 Server模式

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)

JVMclient模式下运行,默认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)

JVMclient模式下运行,默认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.minbox.org
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同级目录下。
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
6月前
|
安全 Linux
Slax Linux如何获取增强的会话管理与启动参数选项
以上就是关于在Slax Linux中获取增强的会话管理与启动参数选项的全过程。虽然在这个过程中可能会遇到暗礁和风浪,但只要我们用心驾驶,总能找到前行的道路。在旅程中,记得享受这中间的点点滴滴,因为这些都是你成长的痕迹。祝你在这片“数码海洋”中一帆风顺!
136 26
|
7月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
164 18
|
缓存 监控 网络协议
掌控全局:Linux 系统性能调优技巧全面指南
掌控全局:Linux 系统性能调优技巧全面指南
在Linux中,列出几种常见打包工具并写相应解压缩参数。
在Linux中,列出几种常见打包工具并写相应解压缩参数。
|
11月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
存储 监控 安全
Linux内核调优的艺术:从基础到高级###
本文深入探讨了Linux操作系统的心脏——内核的调优方法。文章首先概述了Linux内核的基本结构与工作原理,随后详细阐述了内核调优的重要性及基本原则。通过具体的参数调整示例(如sysctl、/proc/sys目录中的设置),文章展示了如何根据实际应用场景优化系统性能,包括提升CPU利用率、内存管理效率以及I/O性能等关键方面。最后,介绍了一些高级工具和技术,如perf、eBPF和SystemTap,用于更深层次的性能分析和问题定位。本文旨在为系统管理员和高级用户提供实用的内核调优策略,以最大化Linux系统的效率和稳定性。 ###
|
缓存 监控 网络协议
在Linux中,性能调优都有哪几种方法?
在Linux中,性能调优都有哪几种方法?
|
监控 Linux 应用服务中间件
在Linux中,如何进行Web服务器调优?
在Linux中,如何进行Web服务器调优?
|
存储 安全 Linux
在Linux中,内核调优配置文件名字有哪些?举例几个内核需要优化的参数配置?
在Linux中,内核调优配置文件名字有哪些?举例几个内核需要优化的参数配置?
|
Linux 网络安全 数据安全/隐私保护

热门文章

最新文章

下一篇
oss云网关配置