比较war包在Linux或windows服务器上启动及使用 java -jar xxx.jar 或nohup java -jar xxx.jar启动在Linux服务器上的spring boot jar

导读:本篇文章讲解 比较war包在Linux或windows服务器上启动及使用 java -jar xxx.jar 或nohup java -jar xxx.jar启动在Linux服务器上的spring boot jar,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. war包

记得刚毕业进入的第一家公司,当时使用的spring mvc + hibernate,并打成war包部署到服务器上。

前提是服务器上需要安装Tomcat

1.1 windows服务器

如果war包部署到window服务器上,双击startup.bat即可启动tomcat

1.2 linux服务器

如果war包部署到linux服务器上,执行如下命令:

# 1. 首先进入到Tomcat的bin目录
cd ./tomcat/bin

# 2. 以下两种方式启动war包
(1) ./startup.sh
(2) sh startup.sh

war包的部署缺点:

  1. 你重启了服务器上的tomcat,在你关掉tomcat的一瞬间,这上面部署的所有项目都不能用。

  2. 如果你的项目启动失败,也会导致tomcat一直处于关机状态,别的项目就会一直无法访问。

war包的优点:

  1. war包部署的好处就是你一旦部署成功,如果你的代码有更改,只需要替换掉需要更改的代码,不需要再次部署。

离开这家公司进入新的公司后,使用的是spring boot + mybatis框架,并打成jar包部署到Linux服务器上。

部署jar包相对于war对其他项目的影响几乎为0,因为他只需要部署apach,并重启apach,因为他自身带有tomcat,所以我们不需要额外部署tomcat,但是我们需要运行jar包,这个项目才算运行起来。

我们可以使用以下几种方式运行jar包。

2. jar包

启动Linux服务器上的jar包有两种方式:

  1. java -jar xxx.jar

  2. nohup java -jar xxx.jar

如下分析这两种启动方式:

2.1 java -jar

2.1.1 java -jar xxx.jar

表示在当前ssh窗口,可按CTRL + C打断程序运行,或者直接关闭窗口,则程序直接退出。

2.1.2 java -jar xxx.jar &

表示在当窗口关闭时,程序才会中止运行。

&代表让该命令在后台执行。

2.2 nohup java -jar

2.2.1 nohup java -jar XXX.jar &

表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。

注意,该作业的所有输出被重定向到nohup.out的文件中。

2.2.2 nohup java -jar xxx.jar > Log.log & 或者 nohup java -jar xxx.jar >> Log.log &

nohup java -jar xxx.jar > Log.log & 或者 nohup java -jar xxx.jar >> Log.log &

表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,并且该作业的所有输出被重定向到Log.log的文件中。

> Log.log 该命令就是指定日志输出的文件。

>> Log.log表示将输出以追加的方式重定向到Log.log

【注意】Log.logxxx.jar同目录。

2.2.3 nohup java -jar xxx.jar > Log.log 2>&1 & 或者nohup java -jar xxx.jar >> Log.log 2>&1 &

> Log.log 2>&1 :表示将 stdoutstderr 合并后重定向到 Log.log

  1. 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。

  2. 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。

  3. 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

2.2.4 nohup java -jar xxx.jar > /dev/null 2>&1 &

屏蔽输出,起到禁止输出作用。

/dev/null是一个特殊的文件,写入到它的内容都会被丢弃;

如果尝试从该文件读取内容,那么什么也读不到。

但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到禁止输出的效果。

2.2.5 nohup java -jar -XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=1g -Xmx2048m -Xms2048m -Xmn256k test-*.jar >/dev/null &

-XX:MetaspaceSize=1g:指Metaspace扩容时触发FullGC的初始化阈值,也是最小的阈值。

-Xmx10240m:代表最大堆。

-Xms10240m:代表最小堆。

-Xmn5120m:代表新生代。

需要有以下几点明确XX:MetaspaceSize

  1. 无论-XX:MetaspaceSize配置什么值,Metaspace的初始容量一定是21807104(约20.8m)

  2. Metaspace由于使用不断扩容到-XX:MetaspaceSize参数指定的量,就会发生FGC( 从应用程序启动到当前,发生Full GC的次数);且之后每次Metaspace扩容都会发生FGC

  3. 如果Old区配置CMS垃圾回收,那么第2点的FGC也会使用CMS算法进行回收。

  4. Meta区容量范围为[20.8m, MaxMetaspaceSize)。

  5. 如果MaxMetaspaceSize设置太小,可能会导致频繁FGC,甚至OOM

  6. 建议MetaspaceSizeMaxMetaspaceSize设置一样大。具体设置多大,建议稳定运行一段时间后通过jstat -gc pid确认且这个值大一些,对于大部分项目256m即可。

3. java -jar 和 nohup java -jar的比较

综合上述分析后,我们在实际开发中,经常使用nohup java -jar xxx.jar启动jar包,如下代码所示:

nohup java -jar admin.jar > log.file 2>&1

而不太会使用 java -jar xxx.jar启动jar包。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99156.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!