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 &
说明:
--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:<file> 将 GC 状态记录在⽂件中 (带时间戳)
-Xbatch 禁⽤后台编译
-Xms<size> 设置初始 Java 堆⼤⼩
-Xmx<size> 设置最⼤ Java 堆⼤⼩
-Xss<size> 设置 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之后,标准输出就会不再存在,没有任何地⽅能够到输出的内容。
2. 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⽂件中:
# b.txt >out 2>out
# cat out
<
�法访问b.txt: 没有那个⽂件或⽬录
WTF?竟然出现了乱码,这是为啥呢?这是因为采⽤这种写法,标准输出和错误输出会抢占往out⽂件的管道,所以可能会导致输出内容的时候出现缺失、覆盖等情况。现在是出现了乱码,有时候也有可能出现只有error信息或者只有正常信息的情况。不管怎么说,采⽤这种写法,最后的情况是⽆法预估的。
⽽且,由于out⽂件被打开了两次,两个⽂件描述符会抢占性的往⽂件中输出内容,所以整体IO效率不如>/dev/null 2>&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 &
spring怎么读取jar文件为了不让⼀些执⾏信息输出到前台(控制台),我们还会加上刚才提到的>/dev/null 2>&1命令来丢弃所有的输出:# nohup java -jar xxxx.jar >/dev/null 2>&1 &
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论