一、常用GC参数(20个左右即可)
1、各种垃圾回收器的参数
PS + PO 常用的只有几十个
CMS的比较多,不建议使用
G1的常用参数简单
ZGC只有三个参数
二、OOM出现的方式
1、写一个让内存溢出的函数
(1)简单案例-list,往list内部添加元素
main方法的根对象往里装
(2)复杂案例-模拟数据库读取数据,结果记录传输
使用了线程池
回收的内存越来越小--吃内存的情况
最后,不停full gc
每次回收几K
最终产生OOM
查不出来的bug-进行重启
2、推荐一个垃圾回收相关的功能-Arthas
最常用:dashboard-对系统的观察
各个代的回收算法
使用jvm查看默认的命令
3、观察哪些对象在吃内存-排查(实际调优经验)
jps 查看进程编号
jmap -histo 进程ID | 20
4、如何回答
(1)jmap会暂停堆内存,对内存产生巨大影响×
(2)java 启动的时候配置HwapDownOutOfMemory
一旦发生OOM,会导出一个文件
对文件进行分析
(3)堆内存超级大时,如何定位问题
上述工具,24小时分析不出来结果
四、调优实战
1、java相关命令
java -version
java:java的所有参数
-开头,表示
java的标准参数
2、non-standard,非标准参数,以-X开头的
参数:java -X
程序最小内存,最大内存
3、另外一种参数-XX
java -XX:+PrintFlagsFinal,加more分页
728个参数