其他
面试官:你这JVM调优,回答的很有问题呀!!
1
写在前面2
JVM 调优实践第一步:监控分析 GC 日志 第二步:判断 JVM 问题 :
第三步:确定调优目标 第四步:调整参数
第五步:对比调优前后差距 第六步:重复:1 、 2 、 3 、 4 、 5 步骤
第七步:应用 JVM 到应用服务器 :
-Xms 堆内存的最小值 :默认情况下,当堆中可用内存小于 40%时,堆内存会开始增加,一直增加到-Xmx 的大小。 -Xmx 堆内存的最大值:默认值是总内存/64(且小于 1G),默认情况下,当堆中可用内存大于 70%时,堆内存会开始减少,一直减小到-Xms 的大小; -Xmn 新生代内存的最大值:包括 Eden 区和两个 Survivor 区的总和,配置写法如:-Xmn1024k,-Xmn1024m,-Xmn1g -Xss 每个线程的栈内存:默认 1M,一般来说是不需要改。线程栈越小意味着可以创建的线程数越多
这里比较重要喔,一般我们都是将 Xms 和 Xmx 的值设置为一样的!!!
开启时间便于我们更精确地判断几次 GC 操作之间的时两个参数的区别 时间戳是相对于 0 (依据 JVM 启动的时间)的值,而日期戳(date stamp)是实际的日期字符串 由于日期戳需要进行格式化,所以它的效率可能会受轻微的影响,不过这种操作并不频繁,它造成的影响也很难被我们感知。
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:E:/logs/gc-default.log这样就会在 e 盘下 logs 文件夹下面,生成 gc-default.log 日志
Young GC 日志含义
2022-08-05T13:45:23.336+0800: 4.866: [GC (Metadata GC Threshold) [PSYoungGen: 136353K->20975K(405504K)] 160049K->48437K(720384K), 0.0092260 secs] [Times: user=0.00 sys=0.02, real=0.02 secs]
2022-08-05T13:45:23.336+0800: 本次GC发生时间
4.866: 举例启动应用的时间
[GC【表示GC的类型,youngGC】 (Metadata GC Threshold) 元空间超阈值
[PSYoungGen: 136353K->20975K(405504K年轻代总空间)] 160049K->48437K(720384K)整堆), 0.0092260 secs本次垃圾回收耗时]
[Times: user=0.00本次GC消耗CPU的时间 sys=0.02系统暂停时间, real=0.02 secs实际应用暂停时间]
FullGC 日志含义
2022-08-05T20:24:47.815+0800: 6.955: [Full GC (Metadata GC Threshold) [PSYoungGen: 701K->0K(72704K)] [ParOldGen: 38678K->35960K(175104K)] 39380K->35960K(247808K), [Metaspace: 56706K->56706K(1099776K)], 0.1921975 secs] [Times: user=1.03 sys=0.00, real=0.19 secs]
2022-08-05T20:24:47.815+0800:
6.955: 刚启动服务就Full GC【整堆回收!!】
[Full GC (Metadata GC Threshold) Metaspace空间超限!
[PSYoungGen: 701K->0K(72704K)] 年轻代没有回收空间
[ParOldGen: 38678K->35960K(175104K)] 39380K->35960K(247808K), 老年代也没有到阈值,整堆更没有到阈值
[Metaspace: 56706K->56706K(1099776K)], 0.1921975 secs]
[Times: user=1.03本次GC消耗CPU的时间 sys=0.00系统暂停时间, real=0.19 secs实际应用暂停时间]
Throughput:97.043%
Avg Pause GC Time:7.80 ms 平均 GC 暂停时间 Max Pause GC Time:190 ms 最大 GC 暂停时间
Metadata GC Threshold:元空间超阈值 Allocation Failure :年轻代空间不足
Ergonomics:译文是“人体工程学”,GC 中的 Ergonomics 含义是负责自动调解 gc 暂停时间和吞吐量之间平衡从而产生的 GC。111 获取阿里内部 java 性能调优手册;目的是使得虚拟机性能更好的一种做法。
往期推荐