jvm性能调优

为什么调优

  • 防止出现OOM,进行JVM规划和预调优
  • 解决程序运行中各种OOM
  • 减少Full GC出现的频率,解决运行慢,卡顿问题

调优的大方向

  1. 合理的编写代码
  2. 充分并合理的使用硬件资源
  3. 合理的进行JVM调优

总结:要从业务场景开始,没有业务场景的调优都是耍流氓;无监控,不调优。

调优监控的依据

运行日志、异常堆栈、GC日志、线程快照、堆转储快照

调优的基本步骤

  1. 第一步,熟悉业务场景
  2. 第二步,进行性能监控来发现问题:GC频繁、cpu load过高、OOM、内存泄露、死锁、程序相应时间过长
  3. 第三步,进行性能分析来排查问题:
    • 打印GC日志,通过GCviewer或者http://gceasy.io来分析日志信息
    • 灵活运用命令行工具,jstack,jmap,jinfo等
    • dump出堆文件,使用内存分析工具分析文件
    • 使用阿里Arthas,或jconsole,JVisualVM来实时查看JVM状态
    • jstack查看堆栈信息
  4. 第四步,进行性能调优解决问题:
    • 适当增加内存,根据业务背景选择垃圾回收器
    • 优化代码,控制内存使用
    • 增加机器,分散节点压力
    • 合理设置线程池数量
    • 使用中间件提高程序效率,比如缓存,消息队列等
    • 其他…