# 为什么要学习这课程?
JAVA 性能监控与调优,在开发阶段下基本上不用,但是在 生产环境 下就比较重要了。
生产环境比较复杂:
硬件问题、网络问题、CPU 利用率高
出现问题后不好进行定位
因为无法像开发环境下那样随随便便就重启应用、修改日志增加日志输出等手段,来进行定位
所以对生产环境进行监控是非常有必要的。这里不讲解基于硬件的监控,我们聚焦在 对 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 方法
常用代码优化方法