Java Troubleshooting
Java 应用诊断不完全指南
工具
- jps
- jstat
- jinfo
- jcmd
- jstack
- jmap & jhat
- JConsole
- Java VisualVM
- Java Mission Control (JMC) & JFR
- jdb
- GCViewer
- MAT
- btrace
- bytesman
- async-profiler
- decompiler
- Arthas
概念
- 内存
- 线程
- 锁
- JIT 编译
- 锁
- ClassLoader
案例
掌握原理, 使用工具:
- GCViewer https://github.com/chewiebug/GCViewer
- MAT https://www.eclipse.org/mat/
- btrace https://github.com/btraceio/btrace
- async-profiler https://github.com/jvm-profiling-tools/async-profiler
- Java class decompiler http://java-decompiler.github.io/
- JDK 自带的各种小工具
JVM 各种 GC 算法
- Serial
- Parallel scavenge & Parallel old
- Parallel new & CMS
- G1
- ZGC
- Shenandoah GC
- Azul C4 GC
GC verbose log 分析
- 打印 GC 日志相关的 flags
- GC verbose 日志分析
Thead dump 分析
Heap dump 分析
- 如何生成heap dump
- 使用MAT 分析heap dump
- 内存分析常用的 OQL
- 使用 Java VisualVM 分析 heap dump
- 常见的导致 Out Of Memory (OOM) 的问题
- 案例分析:HashMap 并发访问引起的死循环问题
- 案例分析: Native Memory
Synchronize 与锁优化
- Synchronize 关键字
- 膨胀锁
- 轻量级锁 与 自旋
- 偏向锁
Lock, Condition与AQS
- Lock
- Condition
- 与Synchronize的区别
- AQS
- 基于AQS的其它类
- 编译, JIT 与运行时优化
Java 应用程序的各种监控指标
- 基于 Java 的互联网应用 应该监控那些指标
- 监控指标常见的异常规则
- tps
- transaction time
- cpu usage
- GC overhead
- JVM memory available
- App server busy thread count
- Total thread count
- Error count
- OOM error count
- Heap size after GC
- 5xx, 4xx, 3xx, 2xx count