关于征求网站建设,如何在云服务器上搭建网站,wordpress 08,怎么用图片做网站背景图最近项目中为了提高用户体验度#xff0c;前台创建任务后台任务#xff0c;用多线程来跑。现在的场景#xff1a;后台定时任务管理这两个线程池#xff0c;一个最大线程数10个#xff0c;一个最大线程数15。应用部署之后#xff0c;不超过5个小时#xff0c;服务器负载高…最近项目中为了提高用户体验度前台创建任务后台任务用多线程来跑。现在的场景后台定时任务管理这两个线程池一个最大线程数10个一个最大线程数15。应用部署之后不超过5个小时服务器负载高内存使用过多。分析原因因为这个功能是excel导入功能如果前台有大量的导入任务时那么后台的负载就会很高。我的实现原理定时任务读取任务放到任务队列表中然后使用线程池消费任务队列中的任务每个线程时一直循环取任务。我的定时任务周期是 1 分钟线程池从初始化时空闲线程存活的时间为 1 分钟任务队列没有设定最大数量值。优化1.任务队列没有上限定时任务每次启动都回去数据库中读取任务放入对列表中如果一直往任务队列中放那么任务队列占用的内存会越来越大导致服务器内存不足。解决办法定时任务在读取任务时先判断任务队列的大小比如我这设置的100个那么我就不再读取新的任务了。这个参数需要通过观察机器的负载然后来调整。2.线程池中的线程无限循环处理任务当任务数量过多的时候线程会一直执行停不下来。线程池中的线程无限循环处理任务当任务数量过多的时候线程会一直执行停不下来。解决办法在线程内部设置计数器当一个线程累计到一定数量退出循环然后清空资源回收间歇性周期的执行任务相当于定期回收资源3.定时任务 1 分钟那么空闲线程存活的时间为1分钟由于空闲线程存活时间是 1 分钟那么我的定时任务也是 1 分钟这个时候线程就基本就不会被线程池回收那么资源就一直没有释放被回收。解决办法调整线程空闲的线程存活时间为定时任务周期的一半也就是30秒。4.在线程池中有核心线程对于核心线程超时也回收所以需要执行下边这个方法确保核心线程超时之后也被回收。解决办法threadPoolExecutor.allowCoreThreadTimeOut(true);优化之后的流程任务定期读取任务往任务队列中放一定量(不能超过最大值)的任务之后线程池中的线程超时时间设置短一点线程通过计数器当执行了一定数量的线程之后推出循环这个时候线程就空闲了后边就会被线程池回收资源被回收如此反复进行下去资源回收重新分配不会大量消耗服务资源。通过以上几个点的优化程序消耗服务器资源好很多可能还有优化的地方后边再补充。