最近发现个问题,不知道是使用不当还是何种原因造成的。
具体内容:
用Quartz调度任务,周期10分钟。但具体业务执行的时间要大于10分钟。Quartz线程池的配置是缺省,查了一下10个大小。
现象,运行一段时间后,Quartz的线程池中9个线程的状态是Waiting on Condition,一个是runnable。整进程的状态貌似停住了,调度时间到了,没有执行高度线程中的代码。
怀疑,由于业务操作的时候大于10分钟(调度周期),可能会导致(猜的)Quartz的线程池中的线程还在处理业务,一次调度结束但实际业务操作还在运行(指在调度的线程池中运行),运行一段时间后这样的线程变多,导致无法响应下一次调度。
解决办法,目前设想的是,具体的业务,在另一个线程池中完成而不使用Quartz的线程池做具体业务操作,每一次调度线程只把任务放到具体执行线程池中,就结束。
继续上面说的,把一个实际基于FTP的文件定时扫描发送程序按上述思路调整了下。
调整前:
调度执行内容:
1.扫述表找到要转发的文件到LIST
2.遍历LIST,顺序发送文件。
调整后:
调度执行内容:
1.扫述表找到要转发的文件到LIST
2.遍历LIST,以每个元素构造转发Thread并提交到线程池。(或者设个最大转发数来控制同时转发的数量)
最后的结论不知道是否正确,业务操作时间较长的话,不要在调试本身的线程池中做。
分享到:
相关推荐
springboot中使用quartz,包括持久化和非持久化操作 解决service注入问题 介入指定job中传入参数问题
Quartz使用指南 Quartz使用指南 Quartz使用指南
使用quartz需要的jar包
.NetCore 中使用QuartZ
quartz.net+TopShelf
Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解
quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...
使用quartz实现不重启服务器修改自定义配置。介绍见 http://blog.csdn.net/autfish/article/details/54583183
Quartz定时功能在WebForm 以及 WinForm上使用时,需要引用相关的dll
quartz内部表.sql。
QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或...
Quartz使用方法Quartz使用方法Quartz使用方法Quartz使用方法Quartz使用方法
quartz使用指南,quartz使用指南,quartz使用指南
Quartz 定时功能 quartz 定时程序 Quartz
Quartz +spring开发使用说明文档
spring的quartz使用实例,spring的quartz使用实例
jboss6下使用quartz两种方法,详细方法见内容
quartz在集群环境下的最终解决方案quartz在集群环境下的最终解决方案
spring2.0 使用 Quartz 必备包 里面有: quartz-all-1.5.2.jar spring-support.jar 适合:SSH框架 spring2.0 strut2.0 hibernate3.2等
内含: quartz-1.5.2.zip 定时器Quartz及使用说明 Quartz的API