码迷,mamicode.com
首页 > 编程语言 > 详细

jvm相关参数及java内存调优常用命令方法

时间:2019-11-05 00:54:09      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:heap   cmd   图形   details   空间   日志文件   初始化   图片   ogg   

1、通过 jstat -gc pid interval 查看每次 GC 之后,具体每一个分区的内存使用率变化情况

 

2、通过jcmd pid VM.flags 就可以查看到jvm相关的设置参数

技术图片

 

3、通过“jmap -heap 进程id”查询出 当前进程的JVM 的配置信息,其中就包括垃圾收集器的设置类型

技术图片

 

4、查看 & 分析 GC 日志

首先,我们需要通过 JVM 参数预先设置 GC 日志,通常有以下几种 JVM 参数设置:

-XX:+PrintGC 输出 GC 日志
-XX:+PrintGCDetails 输出 GC 的详细日志
-XX:+PrintGCTimeStamps 输出 GC 的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出 GC 的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行 GC 的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的输出路径

 eg:-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/log/heapTest.log

如果GC日志非常大,可以用GCViewer工具打开日志文件,图形化界面查看整体的 GC 性能,如下图所示:

也可以用GCeasy工具,并且还可以将日志文件压缩之后,上传到 GCeasy 官网即可看到非常清楚的 GC 日志分析结果

 

5、堆中年轻代和老年代的比例设置

在 JDK中,默认情况下年轻代和老年代的比例是 1:2,我们可以通过–XX:NewRatio 重置该配置项。

 

6、堆中年轻代的 Eden 和 To Survivor、From Survivor 的比例是设置

在 JDK中,默认情况堆中年轻代的 Eden 和 To Survivor、From Survivor 的比例是8:1:1,我们可以通过 -XX:SurvivorRatio 重置该配置项。

eg:-XX:SurvivorRatio=8 将 Eden、Survivor 的比例设置为 8:2

 

7、 -XX:+UseAdaptiveSizePolicy 配置项,JVM 将会动态调整 Java 堆中各个区域的大小以及进入老年代的年龄

ps1、通过 -XX:-UseAdaptiveSizePolicy 关闭该项配置

ps2、如果开启了 -XX:+UseAdaptiveSizePolicy 配置项,–XX:NewRatio 和 -XX:SurvivorRatio 将会失效,而 JDK1.8 是默认开启 -XX:+UseAdaptiveSizePolicy 的

ps3、在 JDK1.8 中,不要随便关闭 UseAdaptiveSizePolicy 配置项,除非你已经对初始化堆内存 / 最大堆内存、年轻代 / 老年代以及 Eden 区 /Survivor 区有非常明确的规划了。否则 JVM 将会分配最小堆内存,年轻代和老年代按照默认比例 1:2 进行分配,年轻代中的 Eden 和 Survivor 则按照默认比例 8:2 进行分配。这个内存分配未必是应用服务的最佳配置,因此可能会给应用服务带来严重的性能问题。

 

8、调整某一个程序的堆内存空间

java -jar -Xms4g -Xmx4g heapTest-0.0.1-SNAPSHOT.jar

 

9、-XX:PetenureSizeThreshold

如果分配的对象内存超过了设置的阀值,会直接分配到老年代,这样做的好处就是可以减少新生代的垃圾回收。

 

 

 

 

 

 

 

jvm相关参数及java内存调优常用命令方法

标签:heap   cmd   图形   details   空间   日志文件   初始化   图片   ogg   

原文地址:https://www.cnblogs.com/jetqiu/p/11735773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!