-XX:+G1HeapRegionSize
分区大小,建议逐渐增大该值,1 2 4 8 16 32。
随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长
ZGC做了改进(动态区块大小)
G1NewSizePercent
新生代最小比例,默认为5%
G1MaxNewSizePercent
新生代最大比例,默认为60%
GCTimeRatio
GC时间建议比例,G1会根据这个值调整堆空间
ConcGCThreads
线程数量
InitiatingHeapOccupancyPercent
启动G1的堆空间占用比例
-XX:MaxTenuringThreshold控制的是什么?
A: 对象升入老年代的年龄
B: 老年代触发FGC时的内存垃圾比例
生产环境中,倾向于将最大堆内存和最小堆内存设置为:(为什么?)
A: 相同 B:不同
JDK1.8默认的垃圾回收器是:
A: ParNew + CMS
B: G1
C: PS + ParallelOld
D: 以上都不是
什么是响应时间优先?
什么是吞吐量优先?
ParNew和PS的区别是什么?
ParNew和ParallelOld的区别是什么?(年代不同,算法不同)
长时间计算的场景应该选择:A:停顿时间 B: 吞吐量
大规模电商网站应该选择:A:停顿时间 B: 吞吐量
HotSpot的垃圾收集器最常用有哪些?
常见的HotSpot垃圾收集器组合有哪些?
JDK1.7 1.8 1.9的默认垃圾回收器是什么?如何查看?
所谓调优,到底是在调什么?
如果采用PS + ParrallelOld组合,怎么做才能让系统基本不产生FGC
如果采用ParNew + CMS组合,怎样做才能够让系统基本不产生FGC
1.加大JVM内存
2.加大Young的比例
3.提高Y-O的年龄
4.提高S区比例
5.避免代码内存泄漏
G1是否分代?G1垃圾回收器会产生FGC吗?
如果G1产生FGC,你应该做什么?
1. 扩内存 2. 提高CPU性能(回收的快,业务逻辑产生对象的速度固定,垃圾回收越快,内存空间越大) 3. 降低MixedGC触发的阈值,让MixedGC提早发生(默认是45%)
问:生产环境中能够随随便便的dump吗?
小堆影响不大,大堆会有服务暂停或卡顿(加live可以缓解),dump前会有FGC
问:常见的OOM问题有哪些?
栈 堆 MethodArea 直接内存
如果JVM进程静悄悄退出怎么办?
JVM自身OOM导致
heap dump on oom,这种最容易解决
JVM自身故障
-XX:ErrorFile=http://www.likecs.com/var/log/hs_err_pid.log 超级复杂的文件 包括:crash线程信息 safepoint信息 锁信息 native code cache , 编译事件, gc相关记录 jvm内存映射 等等
被Linux OOM killer杀死
日志位于/var/log/messages
egrep -i 'killed process' /var/log/messages
硬件或内核问题
dmesg | grep java
找我!
如何排查直接内存?
NMT打开 -- -XX:NativeMemoryTracking=detail
perf工具
gperftools
有哪些常用的日志分析工具?
gceasy
CPU暴增如何排查?
top -Hp jstack
arthas - dashboard thread thread XXXX
两种情况:1:业务线程 2:GC线程 - GC日志
死锁如何排查?
jstack 观察线程情况
arthas - thread -b
参考资料
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
JVM调优参考文档:
https://www.cnblogs.com/nxlhero/p/11660854.html 在线排查工具
https://www.jianshu.com/p/507f7e0cc3a3 arthas常用命令
Arthas手册:
启动arthas java -jar arthas-boot.jar
绑定java进程
dashboard命令观察系统整体情况
help 查看帮助
help xx 查看具体命令帮助
jmap命令参考: https://www.jianshu.com/p/507f7e0cc3a3
jmap -heap pid
jmap -histo pid
jmap -clstats pid
https://blog.csdn.net/chenssy/article/details/78271744 分析hotspot error file