dev
Java Basics - JVM Optimization
Application Performance Optimization
- 应用优化
- 数据库优化
- 框架优化
- JVM优化
从上到下,最后才考虑JVM优化。
Scenarios
- CPU使用暴涨
- 内存使用暴涨,使用大量本地内存,OOM
- 频繁FullGC,停顿时间大于1s
Goals: Pick 2 of 3
- 高吞吐量
- 低延迟:GC低停顿和GC低频率
- 低内存占用:因为我们不希望总是打满100%内存,留有一些空间给突发情况
Steps
- 收集数据:实时监控(shell cmd, jdk cmd),事后分析(log + dump)
- 确定目标:内存使用率,停顿时间,回收评率
- 调优与测试:不断微调
- 后续跟踪
JDK Tools
- jps:check running java process
- jinfo:check java run cmd
- jvisualvm: check memory, cpu, gc, dump stack and heap
- jstat: check gc info with -gcutil
- jstack: check stack thread
- jmap: check heap memory or dump the heap with -histo:live
Linux Tools
- top
- free
GC Selection
- CPU单核,Serial
- CPU多核,吞吐两,PS + PO
- CPU多合,停顿时间,CMS / G1