JDK1.6在SUSE11下问题跳变定时任务失效问题记录
来源:互联网 发布:me452ch a是什么网络 编辑:程序博客网 时间:2024/06/08 00:40
问题现象:使用ScheduleExecutorService部署定时任务,在时间向过去跳变比如当前11点跳变为10点后,定时任务突然失效,然后再次到11点时所有积压的定时任务(10-11点)一起执行,可能导致业务压力过大
问题原因:POSIX提供的标准计时器API进行封装,主要提供了两种类型的时钟的封装:CLOCK_REALTIME和CLOCK_MONOTONIC,第一种绝对时间,第二种是相对时间,JDK1.6中使用的是第一种,jdk内部的修复方式是改为第二种(见bug链接最下面评论)
为什么会存在定时任务积压呢?内部实现原理应该和Timer类实现比较类似,即内部有一个队列,以11点跳变到10点为例,假设有个10分钟执行一次的定时任务,本来马上要执行11:10分的定时任务,但是跳变了,然后10:10分的任务进入队列,然后每次队首时间和当前时间比较,如果<=当前时间,则出队列,所以再次到11点10分的时候,之前的任务都出队列然后依次执行了.
问题原因:POSIX提供的标准计时器API进行封装,主要提供了两种类型的时钟的封装:CLOCK_REALTIME和CLOCK_MONOTONIC,第一种绝对时间,第二种是相对时间,JDK1.6中使用的是第一种,jdk内部的修复方式是改为第二种(见bug链接最下面评论)
为什么会存在定时任务积压呢?内部实现原理应该和Timer类实现比较类似,即内部有一个队列,以11点跳变到10点为例,假设有个10分钟执行一次的定时任务,本来马上要执行11:10分的定时任务,但是跳变了,然后10:10分的任务进入队列,然后每次队首时间和当前时间比较,如果<=当前时间,则出队列,所以再次到11点10分的时候,之前的任务都出队列然后依次执行了.
问题解决:升级业务JDK1.6为JDK1.8
此外,比较神奇的是在SUSE10的业务主机上并没有这个问题;
0 0
- JDK1.6在SUSE11下问题跳变定时任务失效问题记录
- Linux定时任务问题记录
- jdk1.6在windows下安装的问题
- 记录一次Linux定时任务遇到的问题
- suse11 sp4下安装datastage11.3时出现JVM问题
- Android 闹钟机制实现定时任务解决重启失效问题
- linux/unix下执行crontab定时任务中文乱码问题
- 解决ubuntu下定时任务不执行问题
- 解决ubuntu下定时任务不执行问题
- 解决ubuntu下定时任务不执行问题
- 定时任务在服务器集群中的实现问题
- STL迭代器失效问题记录
- 记录 laravel session失效问题
- linux下更新JDK1.6问题
- scheduleAtFixedRate定时任务超时问题
- Oozie 定时任务 细节问题
- 定时任务中ifconfig问题
- 请教定时执行任务问题
- Jmeter之响应断言
- 数据标准化:数据资产化从0到1的起点
- 文件编码格式ANSI转UTF8
- RecyclerView简单使用总结
- 比较二棵二叉排序树是否相等
- JDK1.6在SUSE11下问题跳变定时任务失效问题记录
- 51nod 1056 最长等差数列 V2
- Oracle-分析函数之sum(...) over(...)
- poj 3484 Showstopper(二分)
- iOS自定义摄像机或者拍照
- Couldn't run /usr/bin/dumpcap in child process:权限不够
- python中的os.path.join() 作用
- Anbox让你在Linux上“原生运行”Android应用
- Python进阶(三十五)-Fiddler命令行和HTTP断点调试