spring 启动脚本分析
Posted 朝北教室的风筝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring 启动脚本分析相关的知识,希望对你有一定的参考价值。
参考:JVM 参数使用总结
参考:java -Xms -Xmx -XX:PermSize -XX:MaxPermSize
参考:JVM调优总结 -Xms -Xmx -Xmn -Xss
参考:JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
登录服务器之后执行:
sudo -iu sankuai;
ps -ef |grep java
结果为:
[yinfuqing@dx-qcs-regulation-shanghai01 ~]$ sudo -iu sankuai [sankuai@dx-qcs-regulation-shanghai01 ~]$ jps 29777 App 674 Jps [sankuai@dx-qcs-regulation-shanghai01 ~]$ ps -ef|grep java sankuai 694 653 0 11:17 pts/0 00:00:00 grep java sankuai 29777 1185 10 Jan15 ? 02:33:26 /usr/local/java8/bin/java -server -Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8 -Djava.io.tmpdir=/tmp -Djava.net.preferIPv6Addresses=false -Dcom.sun.management.jmxremote.port=25144
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
-Xmx7g -Xms7g -Xss256k -Xmn512m
-XX:SurvivorRatio=8 -XX:PermSize=256m -XX:MaxPermSize=256m
-XX:+HeapDumpOnOutOfMemoryError -XX:ReservedCodeCacheSize=128m
-XX:InitialCodeCacheSize=128m -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution
-XX:+UseConcMarkSweepGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSFullGCsBeforeCompaction=0
-XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=80
-Xloggc:/opt/meituan/logs/simple/com.sankuai.qcs.regulation.shanghai.gc.log
-XX:ErrorFile=/opt/meituan/logs/simple/com.sankuai.qcs.regulation.shanghai.vmerr.log
-XX:HeapDumpPath=/opt/meituan/logs/simple/com.sankuai.qcs.regulation.shanghai.heaperr.log
-Dconfig.type=prod -Dapp.appkey=com.sankuai.qcs.regulation.shanghai
-Djetty.appkey=com.sankuai.qcs.regulation.shanghai com.sankuai.qcs.regulation.shanghai.App
这都是我们在:项目的:bin/run_main.sh中定义的,
大体看一下:
首先看一下参数的类别:
参数分类
1.标准参数
功能和输出的参数都是很稳定的 在未来的JVM版本中不会改变 可以使用java -help检索出所有的标准参数
2.X参数
非标准化参数 在未来的版本可能会改变 所有的参数都用-X开始 可以使用java -X检索 但是注意没有-Xcomp
3.XX参数
非标准 很长一段时间不会列出来 用于JVM开发的debug和调优
-XX指的是debug或者调优的参数
然后:
参数简称 | 参数全称 | 表示含义 | |
-Xms |
-XX:InitialHeapSize |
初始化堆的大小 | |
-Xmx | -XX:MaxHeapSize | 设置堆的最大大小 | |
-XX:newSize | 表示新生代初始内存的大小 | ||
-XX:MaxnewSize | 表示新生代可被分配的内存的最大上限 | ||
-Xmn | 相当于同时设置:1、-XX:newSize:表示新生代初始内存的大小,应该小于-Xms的值; 2、-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值; |
同时设置年轻代大小和年轻代的最大大小,
至于这个参数则是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的。 |
|
-XX:PermSize |
设置永久代的初始大小 | ||
-XX:MaxPermSize |
设置永久代的最大大小 | ||
-XX:NewRatio |
设置新生代和老生代的相对大小 优点是新生代大小会随着整个堆大小动态扩展 -XX:NewRatio=3[老生代/新生代=3] |
||
-XX:SurvivorRatio |
指定Eden区和Survivor区的大小比例 Survior区过大 虽然有足够的空间容纳GC后的幸存对象 但是Eden区药效会导致空间很快耗尽 增加新生代GC次数 |
||
-XX:+HeapDumpOnOutOfMemoryError |
使得JVM在产生内存溢出时自动生成堆内存快照 | ||
XX:HeapDumpPath=<path> |
改变默认的堆内存快照生成路径,<path> 可以是相对或者绝对路径 |
||
-XX:OnOutOfMemoryError |
当内存发生溢出时 执行一串指令 | ||
-Xss | 设置每个线程的堆栈大小,DK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 | ||
以上是关于spring 启动脚本分析的主要内容,如果未能解决你的问题,请参考以下文章
一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式
一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式
解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段