JVM调优
原则
- 大多数需要GC调优的不是参数问题,而是代码问题
- 大多数情况下,分析GC情况优化代码比优化参数多得多
- GC调优是最后的手段
目的
- GC时间够小
- GC次数够少
- 发生FullGC的周期足够长,时间合理,最好是不发生
FullGC执行频率不高,不低于10分钟1次
调优实战
参数
- 开启分析日志 -XX:+PrintGCDetails
- 调整Metadata空间 -XX:MetaspaceSize=64m 减少FullGC
- 减少MinorGC,-Xms 500m
- 增加新生代比重,-Xmn 900m
响应时间
操作响应时间 | 响应时间 |
打开一个站点 | 几秒 |
数据库查询一条记录(有索引) | 十几毫秒 |
机械磁盘一次寻址定位 | 4 毫秒 |
从机械磁盘顺序读取1M 数据 | 2 毫秒 |
从SSD 磁盘顺序读取1M 数据 | 0.3 毫秒 |
从远程分布式换成Redis 读取一个数据 | 0.5 毫秒 |
从内存读取1M 数据 | 十几微妙 |
Java 程序本地方法调用 | 几微妙 |
网络传输2Kb 数据 | 1 微妙 |
合理使用缓存
频繁修改的数据,尽量不要缓存,读写比2:1 以上才有缓存的价值
缓存一定是热点数据
应用需要容忍一定时间的数据不一致。