//常见参数
-Xms1024m 初始堆大小
-Xmx1024m 最大堆大小 通常将xms和xmx设置为相同大小,防止堆扩展,影响性能。
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小
-XX:+HeapDumpOnOutOfMemoryError OOM时自动保存堆文件,能够用visualvm分析堆文件
//收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
//垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
//并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集//线程数.
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)
//并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU状况.
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.
复制代码
edit configurations
因为笔者一直用的是Springboot,所以这边以Springboot的形式进行示范,在启动项目jar包时添加参数。java
java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar
复制代码
Visual VM 由java编写,已经被jdk集成,经过检测 JVM 中加载的类和对象信息等帮助咱们分析内存使用状况,是用来分析java项目 、调优的利器,功能强大。git
概述
:显示了项目的jvm参数。
监视
: {} 暂时省略n个字。
线程
: {} 暂时省略n个字。
抽样器
: {} 暂时省略n个字。
top
或者jps
就能直接查看到Pid。lsof -i:端口号
,前提是你已经安装了。ps -ef | grep 项目名
jstat -gcutil 5 1000
复制代码
NewRatio
为1,因此无论是老年代或者新生代发生gc通常都是在200m左右,咱们很差分辨是哪一个代。其实以前NewRatio=2
,xmx450m
,发生GC的状况是150m。所以是新生代发生了GC。jhat
这个工具,文件能够经过Visual VM产生,固然在OOM的状况下,也能够经过参数产生。
jhat -J-Xmx1024M file
复制代码
分析堆dump应该就能够发现了,这边就不分析了,实际上是重启项目,映射多个端口,而后等待GC,就比较麻烦。为了更加贴近实际,该项目属于真实项目,已部署到阿里云,连接在此,猛戳我,代码来源于github。github
最后祝你们新年快乐,找到好工做。但愿小智能拿个冠军,都看了十几年了,圆了老玩家的梦吧。docker