BUG解决方案
1、并发问题
离线计算任务 为了加快计算的速度
线程池使用 ExecutorService.newFixedThreadPool() 无界队列 导致jvm内存频繁gc STW 雪崩
jstack分析堆栈 VMthread
jmap分析 堆的占用 任务队列对象
ThreadPoolExecutor()
改进:
服务隔离
& 线程池参数改进
& 监控报警
& 松耦合设计 超时时间。熔断降级策略
2、缓存问题
穿透 击穿 雪崩
项目:特价机票
高并发项目 接口层依赖缓存 数据持久化低价数据db
穿透:
攻击访问不存在的数据或冷门数据
null + 短过期时间
击穿:
热点key失效,高并发请求打到db
分布式锁,保证单点加载
数据强一致性
crm项目
过期时间 + mq + databus
mq和databus互备
3、mq问题 消息堆积
Mq消费某个topic的消息,处理的时候需要调用第三方接口,第三方接口变慢导致broker消息的堆积
优化:
1、监控报警
2、细化消息处理逻辑。做到超时、熔断降级策略、松耦合
3、动态开关。支持零时增加消费能力
4、db问题
a、慢查询
做好sql review
索引review
OLAP 和 OLTP 隔离
b、主从延迟,主库写入qps瞬时太高,导致主从延迟 数据不一致
代码问题:避免瞬时大量写入,优化方案
业务自身增长:容量规划、分库分表
5、jvm问题
a、gc
频繁gc导致load高
ygc 5s一次 1次50ms
jvm参数设置 比例 新老:1:2 eden、幸存者:1 1 8
循环new对象
&
大对象导致gc
避免业务大对象
6、服务化
a 超时问题导致雪崩
超时时间设置不合理、重试策略不合理(fail fase\retry)
b 缺少容错和降级、开关
自动开关,根据阈值
手动开发 low