# 为什么要学习这课程?

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 字节码指令与 javap

    javap 可以将 class 文件中的一些字节码指令打印出来

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

  • 常用代码优化方法