cpu过高优化
- 定时任务多线程时 cpu使用率100% 会导致判断接口读取超时 收不到返回结果等 导致判断可用率低
- 应该保证使用率小于100%
解决:降低线程池线程数配置大小
限流
原因:离线数据处理,需要调远程接口,离线数据处理本身使用的是多线程,会导致调用下游 qps 过高,此时通过限流限制调用下游 qps。单机限流。
消息积压
场景:定时任务扫描用户数据,发送通知,指定某个时刻发送消息,使用的mq消息队列实现;消息太多,都指定的同一时间
问题:在达到指定时间后,几十万数据都是指定的这个点消费,就会来不及消费造成消费积压
优化:延时消息时,进行打散,比如12点通知的,分散到12点到12点半消费
mysql深度分页
- 定时任务扫描,使用id> 1000 limit 1000 这种不能并发
- 查询出最大id和最小 id,每次处理500个 1-500 501-1000 有可能1-500中间不够500个 ,对于数据处理来说没有关系,limit 方式改为 id 方式,时间从20s 到20ms
主从延迟
原因:从hive 同步数据到 mysql 数据库,java 代码中使用了线程池,核心线程数20,12cpu。tps 达到了1w,而数据库只能保证5k tps不延迟
解决:降低同步速度,降低写入数据库速度。更改线程池核心线程数为6。更改后 tps 为3k 。也可以通过RateLimiter限流
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。