记录一次网络拥塞导致线程池处于等待状态

场景

一次批量执行任务(12个),最后任务执行成功会批量上传图片,导致线程池都处于等待状态。

19481562921545_.pic_hd

首先这个线程池是通过newSingleThreadExecutor来创建的,并且在执行过程中,不会有新的任务进来,当时的情况是在线程执行过程中卡主,实际发生在上传图片,类似的线程池多大12个,每个线程上传的图片可能多大上百张。

分析

分析上面jstack打印的日志(打印方法是jstack pid),有个waiting on condition,它的含义,我搜了下,是这样的

19541562924017_.pic_hd

由此可以猜测,可能是大并发上传图片导致网络拥塞

解决方法

做一个固定线程大小的线程池,比如3个,专门用于并发上传图片,避免网络拥塞。

cmlanche wechat
欢迎您扫一扫上面的微信公众号,订阅独立开发者