一、JVM全局理解图:
二、使用场景:
1、OOM(OutOfMemory)
可以通过如MAT分析dump文件,定位OOM
2、GC优化
通过不断调整,观察GC日志的吞吐量和停顿时间,寻找最佳值
如使用如下设置:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseG1GC -Xloggc:gc.log ,然后通过(在线分析工具网址)gceasy.io,去查看吞吐量和停顿时间
三、性能优化指南
1、发现问题
GC频繁
死锁
OOM
线程池不够用
CPU负载过高
2、排查问题
打印出gc日志,查看minor gc/major gc,结合工具gc viewer/gceasy.io
jstack查看线程堆栈信息
dump出堆文件,使用MAT或其他工具分析
合理使用jdk自带的jconsole,jvisualvm,阿里的arthas等实时查看JVM状态
灵活应用jps、jinfo、jstat、jmap等常用命令
3、解决方案
适当增加堆内存大小/选择合适的垃圾收集器
使用zk、redis实现分布式锁
设置本地,nginx等缓存减少对后端服务器的访问
后端代码优化及时释放资源/合理设置线程池中的参数
集群部署从而减少单点的压力
利用一些消息中间件比如MQ、Kafka实现异步消息
……