JAVA 性能监控与调优,在开发阶段下基本上不用,但是在 生产环境 下就比较重要了。
生产环境比较复杂:
- 硬件问题、网络问题、CPU 利用率高
- 出现问题后不好进行定位因为无法像开发环境下那样随随便便就重启应用、修改日志增加日志输出等手段,来进行定位
所以对生产环境进行监控是非常有必要的。这里不讲解基于硬件的监控,我们聚焦在 对 JAVA 应用的性能做监控与调优
你将迈过哪些坎?
- 生产环境发生了内存溢出如何处理?
- 生产环境应该给服务器分配多少内存合适?
- 如何对垃圾收集器的性能进行调优?
- 生产环境 CPU 负载彪高该如何处理?
- 生产环境应该给应用分配多少线程合适?
- 不加 log 如何确定请求是否执行了某一行代码?
- 不加 log 如何实时查看某个方法的入参与返回值?
- JVM 的字节码是什么东西?
- 循环体中做字符串 + 拼接为什么效率低?
- 字符串 + 拼接一定就是 StringBuilder.append 吗?
- String 常量池是咋回事?
-
你能收获什么?
熟练使用各种监控和调试工具
- 从容应对生产环境中遇到的各种调试和性能问题
- 熟悉 JVM 的字节码指令因为在源码层面上很多问题无法看的很清楚,编译器将很多语法糖都消除了,真正执行的是什么在源码里面不一定能看出来
- 深入理解 JVM 的自动内存回收机制,学会 GC 调优
- 从容应对面试中关于性能调优和调试的问题
-
适合人群
如果你不熟悉 JAVA 应用监控调优
- 如果你对 JAVA 应用监控调优感兴趣
-
课程如何安排?
基于 JDK 命令行工具的监控
- 如何定位内存溢出
- 如何定位 CPU 利用率高
- 基于 JVisualVM 的可视化监控相当于将各种命令行工具做了一个集成
- 基于 Btrace 的监控调试在不重启应用的情况下,如何知道某个方法的入参和返回值等问题
- Tomcat 性能监控与调优
- Nginx 性能监控与调优
- JVM 层 GC 调优详细的讲解 JVM 内存结构、垃圾回收器、垃圾回收器日志以及如何分析这些日志、如何评价垃圾回收器的性能高低?
-
基于 JDK 命令行工具的监控
JVM 参数类型
- 查看运行时 JVM 参数
- 查看 JVM 统计信息如类加载信息
- jmap + MAT 实战内存溢出
-
基于 JVisualVM 的可视化监控
相当于是前面那些命令的一个集成
监控本地 JAVA 进程
-
基于 Btrace 的监控调试
Btrace 安装使用入门
- Btrace 使用详解
它类似 AOP 的机制,原理很复杂利用了很多高级的知识,本课程还是以使用为主。