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限流


不熄炎
6 声望2 粉丝