大家好。我遇到个棘手的问题,无从下手。 我的给微信用户发送模板消息的方法不执行,日志没有报错信息,微信公众号管理页面后台也没找到任何报错信息。 重启项目后问题消失,但过一段时间问题复现,大概有个 6 天不重启能出现一次,目前发现是在系统繁忙后会偶尔出现此问题。 初步判断是: 未成功调用发送消息的 sendTemplateMsg()方法,此方法由 @Async 标识,是异步方法,@Async 是用默认线程池配置,初步判断是线程池任务队列参数过大,导致任务积压无法完成。 尝试了自定义线程池,配置如下:
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(8); taskExecutor.setMaxPoolSize(25); taskExecutor.setQueueCapacity(1000);//之前这里是 Inteter.max_value 。会不会是 1000 还是太大了? taskExecutor.setThreadNamePrefix("msg-thread-"); taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); taskExecutor.initialize();
用户依旧收不到消息,且不报错。 线程信息大部分情况如下:
Status Number of Threads : 384 Percentage Deadlock 0 0 (%) Runnable 16 4 (%) Waiting on condition 354 92 (%) Waiting on monitor 0 0 (%) Suspended 0 0 (%) Object.wait() 14 4 (%) Blocked 0 0 (%) Parked 0 0 (%)
出现问题时的线程信息忘记导出了(当时只想快点解决生产问题而急忙重启)。
请教大家该如何排查?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.