前置系统拦截请求
背景:由于搞活动,有瞬时流量,好多请求被前置系统拦截。由于前置系统长时间,得不到后端的响应,就认为后端处理器繁忙,然后就拦截请求,不在放行。
根本原因:
线程池配置:20 核心线程数,最大线数也是20,阻塞队列1万。
解决办法:尝试调大最大线程数为100,但是还是没改变,原因,来的请求都先入阻塞队列,待到阻塞队列满了,才会创建新线程,直到100。所以,调大核心线程数,而不是最大线程数。
线程池工作流程:
1、初始化线程池没有线程
2、有任务时,先判断当前线程数有没有达到核心线程数,没有达到直接创建新线程处理任务,达到核心线程数则把任务放阻塞队列中
3、当阻塞队列满了,开始创建新的线程,但是数量不会超过最大线程数
4、当达到最大线程数,阻塞队列也满了,新来的任务就会走饱和拒绝策略。