个人技术分享

JVM调优案例的场景

  • 为什么要调优:防止或者解决jvm虚拟机中的OOM问题;减少FullGC出现的频率,解决系统运行卡、慢问题
  • JVM调优案例的四个方面
  • OOM(堆溢出):java heap space
  • OOM(元空间溢出):Metaspace
  • OOM(GC overhead limit exceeded):超过98%的时间用来做GC,并且回收了不到2%的堆内存时会抛出此异常
  • OOM(线程溢出):创建了大量线程导致的异常
  • jvm调优监控的依据

- 运行日志

- 异常堆栈

- GC日志

- 线程快照

- 堆转储快照

  • 出现的问题

- GC频繁

- CPU load过高

- OOM内存溢出

- 内存泄漏

-  死锁

- 程序响应时间长 

  • 性能分析

- GC日志分析

- jstack、jmap、jinfo等系统工具排查

- dump文件,使用内存分析工具分析,如visualvm、MAT

- jstack查看堆栈信息

- arthas实时监控jvm状态 

JVM性能优化案例

  • 调整堆内存大小提高服务的吞吐量
  • JIT即时编译器优化:只要开启了逃逸分析,就会判断方法中的变量是否发生了逃逸,如果发生了逃逸,就会使用栈上分配;同步消除;标量替换
  • 合理配置堆内存大小:一般设置为FullGC之后的老年代内存占用的3-4倍,方法区设置为1.2-1.5倍,年轻代设置为1-1.5倍
  • cpu占用很高排查方案:top -Hp <进程pid>查看cpu不断飙高的异常线程pid,使用jstack查看该线程的执行情况(jstack <pid> | grep -A<N> 0x<16进制pid>)
  • G1并发GC线程数对性能的影响
  • 调整垃圾回收器提高服务的吞吐量
  • 日均百万级订单交易系统如何设置jvm参数