这篇文章不是告诉大家,quartz的表达式以及程序怎么写。写这篇文章的目的是为了记录用quartz的遇到的问题。
问题描述:我们生产环境有26个定时秒级job需要触发,最近一个月发现job夜里运行良好,白天要各几分钟,甚至几小时才能执行一次。
分析过程:
首先,我怀疑是fullgc导致的系统卡顿,拿到gc日志分析确实有较多的垃圾对象待回收,但是job服务器由两台增加到8台现在任然存在。
其次,通过查看ihs,发现job的触发http请求链接并没有过来,怀疑是触发器quartz的问题
最后,查看源代码,发现quartz默认读取的配置文件在他自己的包中(quart.properties)文件,设定了线程池大小为10,怀疑是线程数太小导致,改为20,一切运行良好。
本人愚昧,看了两天的源码也没看的太明白,好像是用的是wait,noitfy,怀疑是有些job的线程始终获取不到执行机会导致的。希望有大神对quartz实现原理了解的,请不吝赐教。