cpu飙高问题,案例分析(三)——非标导入引发CPU彪高,与RateLimiter限流

一、背景

非标导入使用easyexcel组件进行导入处理,10几万的数据量引发CPU彪高。

二、排查思路

  1. 查看线程栈相关信息;
  2. pinpoint监控查看性能及代码调用情况;
  3. 是否存在大量阻塞慢SQL;
  4. 是否存在短时间内频繁日志输出;

三、问题再现

  使用之前分表导入的30万数据进行导入操作,myops查看排名前十线程栈相关信息(如下图),发现lbs_non_standard_account_common单个线程消费占用CPU 8%左右,启动的线程数量很多。
cpu飙高问题,案例分析(三)——非标导入引发CPU彪高,与RateLimiter限流_第1张图片

四、改善措施

  1. AnalysisEventListener的子类CommonImportExcelListener的invoke方法已将近每秒1万的速率迅速完成业务逻辑校验发送MQ,该MQ内部消费进行业务处理逻辑处理;
  2. 30万的数据将近30秒内发送MQ完成,给消费内部逻辑带来压力导致CPU彪高,使用RateLimiter进行了MQ发送的限流;
  3. 调整消费者主题“lbs_top” 的maxConcurrent参数(该参数设置为单组启动线程数),单个应用实例启动线程的最大数=maxConcurrent参数* 分组数量;
  4. 针对lbs_top消费逻辑中的部分业务查询进行内存缓存改造;

五、RateLimiter

高并发之限流-RateLimiter

六、慢sql解决方案

  1. 增加索引;
  2. 读写分离;

Mysql读写分离(Mycat版)

你可能感兴趣的:(java,java-rocketmq)