JAVA 性能监控与调优,在开发阶段下基本上不用,但是在 生产环境 下就比较重要了。
生产环境比较复杂:

  1. 硬件问题、网络问题、CPU 利用率高
  2. 出现问题后不好进行定位因为无法像开发环境下那样随随便便就重启应用、修改日志增加日志输出等手段,来进行定位

所以对生产环境进行监控是非常有必要的。这里不讲解基于硬件的监控,我们聚焦在 对 JAVA 应用的性能做监控与调优

你将迈过哪些坎?

  • 生产环境发生了内存溢出如何处理?
  • 生产环境应该给服务器分配多少内存合适?
  • 如何对垃圾收集器的性能进行调优?
  • 生产环境 CPU 负载彪高该如何处理?
  • 生产环境应该给应用分配多少线程合适?
  • 不加 log 如何确定请求是否执行了某一行代码?
  • 不加 log 如何实时查看某个方法的入参与返回值?
  • JVM 的字节码是什么东西?
  • 循环体中做字符串 + 拼接为什么效率低?
  • 字符串 + 拼接一定就是 StringBuilder.append 吗?
  • String 常量池是咋回事?
  • i++ 与 ++i 到底哪种写法效率更高?

    你能收获什么?

  • 熟练使用各种监控和调试工具

  • 从容应对生产环境中遇到的各种调试和性能问题
  • 熟悉 JVM 的字节码指令因为在源码层面上很多问题无法看的很清楚,编译器将很多语法糖都消除了,真正执行的是什么在源码里面不一定能看出来
  • 深入理解 JVM 的自动内存回收机制,学会 GC 调优
  • 从容应对面试中关于性能调优和调试的问题
  • 独当一面走向高级工程师很重要的一步

    适合人群

  • 如果你不熟悉 JAVA 应用监控调优

  • 如果你对 JAVA 应用监控调优感兴趣
  • 如果你想跳槽面试高级工程师

    课程如何安排?

  • 基于 JDK 命令行工具的监控

    • 如何定位内存溢出
    • 如何定位 CPU 利用率高
  • 基于 JVisualVM 的可视化监控相当于将各种命令行工具做了一个集成
  • 基于 Btrace 的监控调试在不重启应用的情况下,如何知道某个方法的入参和返回值等问题
  • Tomcat 性能监控与调优
  • Nginx 性能监控与调优
  • JVM 层 GC 调优详细的讲解 JVM 内存结构、垃圾回收器、垃圾回收器日志以及如何分析这些日志、如何评价垃圾回收器的性能高低?
  • Java 代码层优化

    基于 JDK 命令行工具的监控

  • JVM 参数类型

  • 查看运行时 JVM 参数
  • 查看 JVM 统计信息如类加载信息
  • jmap + MAT 实战内存溢出
  • jstack 实战死循环与死锁

    基于 JVisualVM 的可视化监控

    相当于是前面那些命令的一个集成

  • 监控本地 JAVA 进程

  • 监控远程 JAVA 进程

    基于 Btrace 的监控调试

  • Btrace 安装使用入门

  • Btrace 使用详解

它类似 AOP 的机制,原理很复杂利用了很多高级的知识,本课程还是以使用为主。

Tomcat 性能监控与调优

  • Tomcat 远程 debug
  • Tomcat-manager 监控 Tomcat
  • psi-probe 监控 Tomcat
  • Tomcat 调优

    Nginx 性能监控与调优

  • ngx_http_stub_status 监控链接信息

  • ngxtop 监控请求信息
  • nginx-rrd 图形化监控
  • nginx 调优

    JVM 层 GC 调优

  • JVM 内存结构:基于 JDK 1.8

  • 垃圾回收算法
  • 垃圾收集器
  • GC 日志格式与可视化日志分析工具
  • Tomcat 的 GC 调优实战

    Java 代码层优化

  • JVM 字节码指令与 javapjavap 可以将 class 文件中的一些字节码指令打印出来

  • i++ 与 ++i,字符串 + 拼接原理,string 常量池、intern 方法
  • 常用代码优化方法