java启动命令详解


执行命令模版

nohup java -Dfile.encoding=utf-8 -jar \
--server.port=8080 \
-Xmx200M -Xms200M \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m \
-XX:+UseG1GC \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump.hprof \
xxx.jar > /data/log.txt 2>&1 &;

为什么要用 nohup 来启动命令。
首先看正常启动 java 应用的方式,是通过java -jar xxx.jar命令,但是存在一个问题就是退出到命令行后,应用就会被关闭,最为临时调试使用可以,不能保证一直运行。
那通过java -ajr xxx.jar &呢,这个也不行,虽然退出到命令行后,应用不会退出,但是当关闭终端连接后,应用还是被关闭。
最终版还是需要用到 nohup 命令,可以保证在关闭终端连接后,应用依然能够正常运行。

命令解析

针对 log 日志文件前的>说明:

取值 含义
0 stdin 标准输入(一般是键盘)
1 stdout 标准输出(一般是显示屏,是用户终端控制台)
2 stderr 标准错误(错误信息输出)

针对> /data/log.txt说明:/data/log.txt 表示将标准输出输出到指定的文件中,也就相当于 /data/log.txt

如果在项目中有将错误日志和标准输出日志分离的需求,可以加上2> error.log
但是很多时候都会只用一个标准输出文件,可以将标准错误的日志信息重定向到标准输出文件,也就是将两个文件的内容合并在一个文件中输出,此时可以用2>&1
最终形成组合命令就是> /data/log.txt 2>&1

其他配置参数:

  • 主要就是应用的配置信息和 JVM 的配置信息了。项目打包的时候端口可以在配置文件中指定,也可以通过命令指定;
  • 堆内存大小需要进行配置,需要根据项目对内存的需求以及 GC 优化等方面来确定,但是一般-Xms-Xmx两个值都是相同;
  • 接下来就是指定元数据区的大小,在 JDK8 之前是永久代,在 JDK8 及以后的版本是元数据区,这个区域可以可以不用设计很大,一般达到 256m 就已经够用了;
  • 然后是垃圾回收器,根据实际需求来,如果是普通应用其实使用默认就可以,既然 JVM 将 G1 作为 JDK9 及以后的默认收集器,G1 相对于其他垃圾收集器也是有一定的优势,选它就对了;
  • 最后就是 dump 日志,这个可以根据实际需要来配置,方便在出现 OOM 的时候查询错误日志,进行排错。

至于其他的配置参数,比如老年代和年轻代划分的比例、担保机制、期望单次 GC 时间(只针对 G1 垃圾收集器,其他收集器不支持,默认是 200ms,可通过-XX:MaxGCPauseMillis=100ms 配置)等都可以按需来配置。


文章作者: 程序猿洞晓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 程序猿洞晓 !
评论
 上一篇
Sharding-jdbc项目构建和基本本功能 Sharding-jdbc项目构建和基本本功能
数据在体量较大的时候,经常会涉及到分库分表,现在市面上目前使用较多的是基于代理的Mycat和基于客户端的sharding-jdbc,相对于可维护性、学习成本、部署成本等综合考虑,使用Sharding-jdbc是个不错的选择。
2023-04-19
下一篇 
CSS3知识学习笔录 CSS3知识学习笔录
都说CSS3很简单,但是为啥我觉得很难呢,特别是样式遇到问题时,总是没有头绪,真的是搞事情,必须好好学习一下。
2023-04-08
  目录