jps:进程状况工具
项作用jps -q只输出LVMIDjps -m输出虚拟机进程启动时传递给主类main()函数的参数jps -l输出主类的全名,如果进程执行的是jar包,则输出jar路径jps -v输出虚拟机进程启动时的JVM参数jstat:虚拟机统计信息监视工具
如: 打印gc进程数为15084时间间隔250毫秒,总共打印20次命令如下: jstat -gc 15084 250 20 Option:常用参数如下: -class (类加载器) -compiler (JIT) -gc (GC堆状态) -gccapacity (各区大小) -gccause (最近一次GC统计和原因) -gcnew (新区统计) -gcnewcapacity (新区大小) -gcold (老区统计) -gcoldcapacity (老区大小) -gcpermcapacity (永久区大小) -gcutil (GC统计汇总) -printcompilation (HotSpot编译统计)- jinfo:Java配置信息工具 作用:实时查看和调整虚拟机各项参数 打开GC详情:jinfo -flag +PrintGCDetails 15084(关闭的话把+去掉即可)。
创建一个springboot项目,模拟代码如下
初始调优参数: -XX:+PrintGCDetails -Xms1000M -Xmx1000Midea配置java虚拟机位置如下: 运行程序发现启动springboot项目发生了一次Full GC,并且元数据只用不到60M,增加元空间参数进行调优
第一次调优参数如下: -XX:+PrintGCDetails -Xms1000M -Xmx1000M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=100M发现启动不在发生Full GC,使用Jmeter执行50000个线程数进行调用,发现Minior GC次数过多,并且老年代不需要这么多空间 增大年轻代的空间大小,减少老年代空间大小
第二次调优参数如下: -XX:+PrintGCDetails -Xms1000M -Xmx1000M -Xmn800M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=100M发现GC次数和频率明显降低 查看GC日志,每一次存活的对象大概95~120M之间,那么假定Eden区存活的对象有120M在Eden区存活并且要进入到survivor区,为避免动态对象年龄判定直接进入老年代,故分配给survivor区各240M的区域大小,保证进入survior区占空间的一半。 1900M 新生代大小,survivor区总占用240M,故Eden区占用1900 -480= 1420M ,故Eden:Survivor = 1420 :240 ,按照6:1进行调优
第三次调优参数如下: -XX:+PrintGCDetails -Xms2000M -Xmx2000M -Xmn1900M -XX:MetaspaceSize=100M -XX:MaxMetaspaceSize=100M -XX:SurvivorRatio=6上一篇:JVM_日志_内存分配与回收策略_JVM学习(二)