故障模型-Application & Data
#
OOM
#
+ 堆内 【10】
- PermGen
+ 原因:反射类多
+ 解决
先jmap,后btrace【11、12 case2】
- heap
解决:对比Fullgc后的相同对象的数量、大小
+ 堆外Native
- Go to Page self
- 如何排查Java内存泄露(内附各种排查工具介绍) 不闻
- 生产环境下持久带满导致FullGC,如何跟踪
- Go to Page self
应用性能变差
#
+ 原因
- 锁
- heap
+ fullgc后没有空间
原因:内存泄露
工具:heap dump
+ fullgc后有空间
解决:设置门槛,过滤大量短生命周期对象【12 case1,13】
- gc停顿长
解决:【12 case3,13】
- Go to Page self
- Go to Page self
- 听阿里巴巴JVM工程师为你分析常见Java故障案例 ***
Load过高
#
+ cpu load高【13】
- 启动阶段
原因:JIT编译器
解决:分层编译
- 运行阶段
原因:有热点方法
工具:MAT
- 解决
工具【8、9】
数据收集 4、5
- vjtools
- useful-scripts
- 听阿里巴巴JVM工程师为你分析常见Java故障案例 ***
进程Hang
#
进程被杀, JVM crash
#
+ 原因:
JNI
Unsafe
+ 工具:core dump
异常
#
+ 启动异常
+ 心跳异常
CI/CD
#
+ 环境错误
+ 部署包错误
+ 配置错误,误删
系统单点
#
+ 原因: 设计问题
+ 解决:服务去状态,多实例部署
异步阻塞同步
#
依赖超时,依赖异常
#
+ 解决【15,16】
- 区分强弱依赖
- 压测 + 容量规划
- 熔断 && 降级
- Go to Page self
- {% post_link ‘stability’ %} self
业务线程池满
#
+ 最佳实践:【4】
+ 案例:【14】
- 问题:使用blockingQueue.put
- 解决:blockingQueue.offer(time超时机制)+限制队列长度
- 最佳实践:生产上线程池的core Size和poolSize设置的一样,请求不在队列里排队
- Go to Page self
- 从一个故障说说Java的三个BlockingQueue 阿里毕玄
流控不合理
#
其他-数据收集
#
+ 1.Heap dump
+ 2. GC 日志
+ 3. core dump
+ 4. 线程stack
+ 5.os进程信息
参考
#
大纲
#
- 超全总结 | 阿里如何应对电商故障?神秘演练细节曝光 阿里巴巴 周洋
Application & Data
#
- 如何检测 Web 服务请求丢失问题 Nginx tracing + Tomcat tracing
- 系统中的故障场景建模 应用层
- 大方法 codecache