Springboot项目使用java -jar 启动jar包参数详解

springboot jar包的启动脚本 springboot jar包的启动脚本 第一步: 先把一个springboot项目打包,打成jar形式 这边我使用的Idea 第二步:启动脚本书写 建一个demo-web.sh的脚本文件 脚本文件的内容: #!/bin/sh #这里可替换为你自己的执行程序,其他代码无需更改 ... 阅读详情

命令实例:
nohup java -Xms500m -Xmx500m -Xmn250m -Xss256k -server -XX:+HeapDumpOnOutOfMemoryError -jar $JAR_PATH/test-0.0.1-SNAPSHOT.jar --spring.profiles.active=daily -verbose:class &
说明:
–spring.profiles.active=daily, 这个可以在spring-boot启动中指定系统变量,多环境(测试、预发、线上配置)的区分
在排查jar包冲突时,可以指定启动的-verbose:class 打印出启动的应用实际加载类的路径,来排查来源。
jvm堆设值: -Xms500m -Xmx500m -Xmn250m -Xss256k
nohup 不挂断地运行命令;& 在后台运行 ,一般两个一起用。 eg:nohup command &
-server:服务器模式,在多个CPU时性能佳,启动慢但性能好,能合理管理内存。
-XX:+HeapDumpOnOutOfMemoryError:在堆溢出时保存快照
可以用 java -X命令在终端查询所有的java堆参数:
-Xmixed 混合模式执行 (默认)
-Xint 仅解释模式执行
-Xbootclasspath:<用 : 分隔的目录和 zip/jar 文件>
设置搜索路径以引导类和资源
-Xbootclasspath/a:<用 : 分隔的目录和 zip/jar 文件>
附加在引导类路径末尾
-Xbootclasspath/p:<用 : 分隔的目录和 zip/jar 文件>
置于引导类路径之前
-Xdiag 显示附加诊断消息
-Xnoclassgc 禁用类垃圾收集
-Xincgc 启用增量垃圾收集
-Xloggc: 将 GC 状态记录在文件中 (带时间戳)
-Xbatch 禁用后台编译
-Xms 设置初始 Java 堆大小
-Xmx 设置最大 Java 堆大小
-Xss 设置 Java 线程堆栈大小
-Xprof 输出 cpu 配置文件数据
-Xfuture 启用最严格的检查, 预期将来的默认值
-Xrs 减少 Java/VM 对操作系统信号的使用 (请参阅文档)
-Xcheck:jni 对 JNI 函数执行其他检查
-Xshare:off 不尝试使用共享类数据
-Xshare:auto 在可能的情况下使用共享类数据 (默认)
-Xshare:on 要求使用共享类数据, 否则将失败。
-XshowSettings 显示所有设置并继续
-XshowSettings:all
显示所有设置并继续
-XshowSettings:vm 显示所有与 vm 相关的设置并继续
-XshowSettings:properties
显示所有属性设置并继续
-XshowSettings:locale
显示所有与区域设置相关的设置并继续

-X 选项是非标准选项, 如有更改, 恕不另行通知。

以下选项为 Mac OS X 特定的选项:
-XstartOnFirstThread
在第一个 (AppKit) 线程上运行 main() 方法
-Xdock:name=<应用程序名称>"
覆盖停靠栏中显示的默认应用程序名称
-Xdock:icon=<图标文件的路径>
覆盖停靠栏中显示的默认图标
-server和-client具体说明:
-server:一定要作为第一个参数,在多个 CPU 时性能佳,还有一种叫 -client 的模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试,在 32 位环境下直接运行 Java 程序默认启用该模式。Server 模式的特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境,在具有 64 位能力的 JDK 环境下默认启用该模式,可以不配置该参数。

-XX:+HeapDumpOnOutOfMemoryError:
该配置会把快照保存在user.dir中,比如你用tomcat启动,那应该是在tomcat的bin目录下

当然,也可以通过XX:HeapDumpPath=./java_pid.hprof来显示指定路径

此外,OnOutOfMemoryError参数允许用户指定当出现oom时,指定某个脚本来完成一些动作,比如邮件知会。。。

$ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:OnOutOfMemoryError =“sh ~/cleanup.sh” MyApp

其他补充说明:
shell命令重定向绑定:
nohup command >/dev/null 2>&1 &

/dev/null 2>&1。这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。

  1. /dev/null

这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。

  1. 2>&1

这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。

/dev/null 2>&1 VS 2>&1 >/dev/null

乍眼看这两条命令貌似是等同的,但其实大为不同。刚才提到了,linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令。那么我们同样从左到右地来分析2>&1 >/dev/null:

2>&1,将错误输出绑定到标准输出上。由于此时的标准输出是默认值,也就是输出到屏幕,所以错误输出会输出到屏幕。

/dev/null,将标准输出1重定向到/dev/null中。
我们用一个表格来更好地说明这两条命令的区别:

命令 标准输出 错误输出

/dev/null 2>&1 丢弃 丢弃
2>&1 >/dev/null 丢弃 屏幕
/dev/null 2>&1 VS >/dev/null 2>/dev/null

那么可能会有些同学会疑问,为什么要用重定向绑定,而不是像>/dev/null 2>/dev/null这样子重复一遍呢。

为了回答这个问题,我们回到刚才介绍输出重定向的场景。我们尝试将标准输出和错误输出都定向到out文件中:

#ls a.txt b.txt >out 2>out

#cat out

a.txt

�法访问b.txt: 没有那个文件或目录

WTF?竟然出现了乱码,这是为啥呢?这是因为采用这种写法,标准输出和错误输出会抢占往out文件的管道,所以可能会导致输出内容的时候出现缺失、覆盖等情况。现在是出现了乱码,有时候也有可能出现只有error信息或者只有正常信息的情况。不管怎么说,采用这种写法,最后的情况是无法预估的。

而且,由于out文件被打开了两次,两个文件描述符会抢占性的往文件中输出内容,所以整体IO效率不如>/dev/null 2>&1来得高。

nohup结合
1.nohup

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ & ]

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

2.&

用途:在后台运行

一般两个一起用

我们经常使用nohup command &命令形式来启动一些后台程序,比如一些java服务:

#nohup java -jar xxxx.jar &

为了不让一些执行信息输出到前台(控制台),我们还会加上刚才提到的>/dev/null 2>&1命令来丢弃所有的输出:

#nohup java -jar xxxx.jar >/dev/null 2>&1 &

Spring Boot(八):SpringBoot项目如何部署上线(两种方式 jar包和war包) 项目部署一般是两种方式:一种是打包成 jar 包直接执行,另一种是打包成 war 包放到 tomcat 服务器下。springboot一般情况下默认为jar包方式,这里我把jar包和war包两种方式都记录一下 *默认maven管理项目 !!! 1、jar包方式: a、先用mvn clean清理一下; b、忽略测试类 打成jar包命令:mvn clean package -Dmaven.te... 阅读详情

相关推荐

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

总结:如何将spring boot项目打包成jar包,并通过java -jar命令运行,浏览器也能成功访问

如何将spring boot项目打包成jar包,并通过java -jar命令执行一·修改打包方式:二·添加servlet-api的依赖:以下三个任选一个:三·添加jar包的名称:四·若springboot项目中若有jsp页面,必须手动指定最后编译的路径:五·修改springboot打包插件版本:六·打包部署:七·验证测试: 一·修改打包方式: <packaging>jar</packaging> 二·添加servlet-api的依赖:以下三个任选一个: <dependency

weixin_48033662的博客 4730

Unity Android构建报错:compileSdk 35兼容性五层定位法

Android构建中的compileSdk是编译时API目标版本,其升级并非孤立操作,而是触发JDK、Android Gradle Plugin(AGP)、NDK、targetSdk与Unity引擎版本之间强耦合校验的起点。当出现'using a newer Android Gradle plugin to use compileSdk = 35'类报错,本质是代际技术栈错配——例如AGP 7.1.3不识别compileSdk 35所需Java 17语法,或NDK 21与AGP 7.4的ABI规范冲突。该问

weixin_32496547的博客 568

详解java -jar命令及SpringBoot通过java -jav启动的过程

JarLauncher通过加载BOOT-INF/classes目录及BOOT-INF/lib目录下jar文件,实现了fat jar的启动。 SpringBoot通过扩展JarFile、JarURLConnection及URLStreamHandler,实现了jar in jar中资源的加载。 SpringBoot通过扩展URLClassLoader–LauncherURLClassLoader,实现了jar in jar中class文件的加载。 WarLauncher通过加载WEB-INF/classes目

学英语的程序员 5433

NuPlayer 之 Renderer

触发postDrainAudioQueue_l()或postDrainVideoQueue()开始渲染。解码器输出数据 → NuPlayer::Decoder::onMessageReceived。音频数据存入mAudioQueue,视频数据存入mVideoQueue。• 每次写入后通过mNotifyConsumed通知解码器。• 通过AudioSink::write()写入音频设备。• 根据VSync信号和音频时钟调整渲染时机。• 通过Surface直接提交给显示系统。

aningxiaoxixi的博客 309

华中农业大学C++考试基础练习题

实验一 1 通过日期求某月的天数。 输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。 输入描述 输入两个正整数y和m分别表示年份和月份。 输出描述 如果y和m满足条件:1900<=y<3000,0<m<13,输出该月的天数;否则输出“Input error!”。 输入样例 2010 12 输出样例 31 #include"iostream" using n

雨的博客 1万+

java jar springboot_springboot使用jar包

1、打成jar包使用idea默认会将springboot打成jar包,会在target目录下生成项目的jar运行:1.1window环境启动1:可以直接使用java -jar xxx.jar 启动jar包,然后即可在浏览器中访问。注意:我的springboot项目是加了web插件的。启动2:在xx.jar同级目录下建立run.bat文件,在run.bat文件中编辑下列文本。双击运行即可1 @ech...

weixin_33737167的博客 469

VS2022如何兼容老项目?.NET Framework 4.0/4.5安装避坑指南

本文提供了在Visual Studio 2022中兼容和维护.NET Framework 4.0/4.5等老旧项目的完整解决方案。针对VS2022无法直接识别旧框架的核心问题,文章详细剖析了原因,并重点推荐通过官方NuGet包安全获取引用程序集的方法,给出了从下载、解压到部署至标准目录的详细步骤。同时,文章还深入探讨了项目文件格式过旧、NuGet包还原失败等进阶问题的排查与解决策略,旨在帮助开发者高效、稳定地在现代开发环境中维护历史代码库。

weixin_27734811的博客 514

springboot项目部署java -jar方式

以下部署方式,是java开发人员简单部署到服务器,生产中公司一般都有自己的发布系统。 1、将项目打包成jar包 1)使用编译器集成工具打包 或者 2)在项目根目录使用maven指令打包 mvn clean package -Dmaven.test.skip=true 2、将生成的jar包拷贝到我们的linux服务器上 scp target/xxx.jatr root@xxx.xxx.x...

m0_37732829的博客 725

mcgs数据查表功能,用于大量数据对比查找对应数据,减少PLC代码

mcgs脚本实现数据查表功能

qq_24866535的博客 3270

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

spring boot项目打成jar包使用java -jar运行

一、首先在pom文件中添加下面配置: <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-b...

祁东握力的博客 1073

半导体工艺仿真:离子注入工艺仿真_(8).损伤和缺陷仿真

离子注入工艺在半导体制造中是一个重要的步骤,用于在半导体材料中引入特定的掺杂剂。然而,离子注入过程中不可避免地会产生损伤和缺陷,这些损伤和缺陷会直接影响器件的性能和可靠性。因此,对离子注入工艺中的损伤和缺陷进行仿真研究是必不可少的。本节将详细介绍如何使用仿真软件对离子注入过程中的损伤和缺陷进行建模和分析。

2401_87715305的博客 1339

Springboot项目java -jar 启动jar包参数详解

命令实例: nohup java -Xms500m -Xmx500m -Xmn250m -Xss256k -server -XX:+HeapDumpOnOutOfMemoryError -jar $JAR_PATH/test-0.0.1-SNAPSHOT.jar --spring.profiles.active=daily -verbose:class &amp; 说明: --spring...

baidu_35140444的博客 5万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java程序启动参数-D详解 springboot项目实现jar包外配置文件管理

https://blog.csdn.net/fenglongmiao/article/details/80511512 springboot项目实现jar包外配置文件管理 https://blog.csdn.net/xrq0508/article/details/80050119 java -DappName=$appName -Xms512M -Xmx2048M -jar ./appName-$appVersion.jar --spring....

suixinsuoyu12519的专栏 1057

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用ClassFinal实现springboot项目jar包加密

在实际开发中,保护项目的安全性和保密性是至关重要的。针对于项目,如果不经过加密,其他人可以直接通过GUI反编译轻而易举拿到源码,所以我们需要将 JAR 包进行加密从而有效地防止未经授权的访问和修改。本文将介绍如何使用ClassFinal在项目中实现 JAR 包加密。ClassFinal是一个Java字节码混淆和加密工具,可以将Java类文件转换为不可读的形式,从而保护代码免受逆向工程的攻击。它提供了强大的加密算法,可以有效地保护您的应用程序免受非法访问。

Micro麦可乐的博客 1万+

SpringBoot项目运行jar包启动

人工智能,零基础入门!http://www.captainbed.net/inner SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了。下面介绍SpringBoot项目打jar包运行的步骤流程: 一、我们所熟悉的是在开发环境下,直接用开发工具来运行那个启动类,然后就能启动这个项...

code_monkey的博客 32万+

windows下bat脚本启动springboot项目jar包

windows下bat脚本启动springboot项目jar包 一、SpringBoot打jar包 idea打开项目,如果项目是 gradle 仓库,使用如下方式,进行打包:双击bootJar 1.双击clean,清空之前的打包记录 2.双击 bootJar,进行打包,打包文件 在项目根目录build下的libs下 idea打开项目,如果项目是 maven仓库,使用如下方式,进行打包: 项目右键—》Run Maven—>clean—>install 二、jar包部署运行 2.1 jar

12程序猿的博客 1万+

Linux手动启动springboot项目jar包命令详解

1、序言 相信很多朋友都在Linux服务器上都手动启动过springboot项目,对于java -jar都有一定的了解。这次我们专门就Java -jar相关命令做一个详细的理解。 2、Linux运行jar包方式 (1)、java -jar webshop-0.0.1-SNAPSHOT.jar 最简单的jar包运行命令 特点是:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗...

pyf1903047190的博客 4258
上一篇: jenkins中java(openjdk)版本问题
下一篇: Jenkins踩坑之旅:nohup后台执行shell命令
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值