diff --git "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" index d58558b..74afa44 100644 --- "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" +++ "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" @@ -1518,6 +1518,7 @@ - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 10、注册监控线程优化,降低死锁几率; ### TODO LIST diff --git "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" index d58558b..74afa44 100644 --- "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" +++ "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" @@ -1518,6 +1518,7 @@ - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 10、注册监控线程优化,降低死锁几率; ### TODO LIST diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 1ee4588..1f84feb 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -71,8 +71,7 @@ `registry_value` varchar(255) NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`), - KEY `i_u` (`update_time`) + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `xxl_job_group` ( diff --git "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" index d58558b..74afa44 100644 --- "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" +++ "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" @@ -1518,6 +1518,7 @@ - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 10、注册监控线程优化,降低死锁几率; ### TODO LIST diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 1ee4588..1f84feb 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -71,8 +71,7 @@ `registry_value` varchar(255) NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`), - KEY `i_u` (`update_time`) + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `xxl_job_group` ( diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java index 463db77..6c838e0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java @@ -38,7 +38,10 @@ if (groupList!=null && !groupList.isEmpty()) { // remove dead address (admin/executor) - XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(RegistryConfig.DEAD_TIMEOUT); + List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT); + if (ids!=null && ids.size()>0) { + XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids); + } // fresh online address (admin/executor) HashMap> appAddressMap = new HashMap>(); diff --git "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" index d58558b..74afa44 100644 --- "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" +++ "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" @@ -1518,6 +1518,7 @@ - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 10、注册监控线程优化,降低死锁几率; ### TODO LIST diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 1ee4588..1f84feb 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -71,8 +71,7 @@ `registry_value` varchar(255) NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`), - KEY `i_u` (`update_time`) + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `xxl_job_group` ( diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java index 463db77..6c838e0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java @@ -38,7 +38,10 @@ if (groupList!=null && !groupList.isEmpty()) { // remove dead address (admin/executor) - XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(RegistryConfig.DEAD_TIMEOUT); + List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT); + if (ids!=null && ids.size()>0) { + XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids); + } // fresh online address (admin/executor) HashMap> appAddressMap = new HashMap>(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java index 66100a0..779200b 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java @@ -12,7 +12,9 @@ @Mapper public interface XxlJobRegistryDao { - public int removeDead(@Param("timeout") int timeout); + public List findDead(@Param("timeout") int timeout); + + public int removeDead(@Param("ids") List ids); public List findAll(@Param("timeout") int timeout); diff --git "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" index d58558b..74afa44 100644 --- "a/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" +++ "b/doc/XXL-JOB\345\256\230\346\226\271\346\226\207\346\241\243.md" @@ -1518,6 +1518,7 @@ - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 10、注册监控线程优化,降低死锁几率; ### TODO LIST diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 1ee4588..1f84feb 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -71,8 +71,7 @@ `registry_value` varchar(255) NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`), - KEY `i_u` (`update_time`) + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `xxl_job_group` ( diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java index 463db77..6c838e0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java @@ -38,7 +38,10 @@ if (groupList!=null && !groupList.isEmpty()) { // remove dead address (admin/executor) - XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(RegistryConfig.DEAD_TIMEOUT); + List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT); + if (ids!=null && ids.size()>0) { + XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids); + } // fresh online address (admin/executor) HashMap> appAddressMap = new HashMap>(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java index 66100a0..779200b 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java @@ -12,7 +12,9 @@ @Mapper public interface XxlJobRegistryDao { - public int removeDead(@Param("timeout") int timeout); + public List findDead(@Param("timeout") int timeout); + + public int removeDead(@Param("ids") List ids); public List findAll(@Param("timeout") int timeout); diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml index 8865c00..3a4f6b0 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml @@ -18,10 +18,19 @@ t.registry_value, t.update_time + + DELETE FROM xxl_job_registry - WHERE update_time DATE_ADD(NOW(),INTERVAL -#{timeout} SECOND) + WHERE id in + + #{item} + + SELECT t.id + FROM xxl_job_registry AS t + WHERE t.update_time DATE_ADD(NOW(),INTERVAL -#{timeout} SECOND) + DELETE FROM xxl_job_registry - WHERE update_time DATE_ADD(NOW(),INTERVAL -#{timeout} SECOND) + WHERE id in + + #{item} +