Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
熊鹏飞
/
xxljob220
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
878df30b
authored
Feb 25, 2019
by
xuxueli
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
LRU路由更新不及时问题修复
parent
0c977070
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
3 deletions
doc/XXL-JOB官方文档.md
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
doc/XXL-JOB官方文档.md
View file @
878df30b
## 《分
布式任务调度平台XXL-JOB》
## 《分
布式任务调度平台XXL-JOB》
...
@@ -1427,7 +1427,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
...
@@ -1427,7 +1427,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
13、执行器热部署时JobHandler重新初始化,修复由此导致的 "jobhandler naming conflicts." 问题;
-
13、执行器热部署时JobHandler重新初始化,修复由此导致的 "jobhandler naming conflicts." 问题;
-
14、新增Class的加载缓存,解决频繁加载Class会使jvm的方法区空间不足导致OOM的问题;
-
14、新增Class的加载缓存,解决频繁加载Class会使jvm的方法区空间不足导致OOM的问题;
-
15、调整首页报表默认区间为本周,避免日志量太大查询缓慢;
-
15、调整首页报表默认区间为本周,避免日志量太大查询缓慢;
-
16、
[
迭代中
]
任务线程隔离:
-
16、LRU路由更新不及时问题修复;
-
17、
[
迭代中
]
任务线程隔离:
-
执行器测异步响应,不存在阻塞不需要隔离;
-
执行器测异步响应,不存在阻塞不需要隔离;
-
调度中心共用单一调度线程池,可能导致调度阻塞需要线程隔离;调度线程池拆分为Fast/Slow两个,针对调度较慢的执行器地址请求,降级使用Slow线程池;考虑是否可以任务级隔离线程池;
-
调度中心共用单一调度线程池,可能导致调度阻塞需要线程隔离;调度线程池拆分为Fast/Slow两个,针对调度较慢的执行器地址请求,降级使用Slow线程池;考虑是否可以任务级隔离线程池;
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
View file @
878df30b
...
@@ -33,11 +33,25 @@ public class ExecutorRouteLFU extends ExecutorRouter {
...
@@ -33,11 +33,25 @@ public class ExecutorRouteLFU extends ExecutorRouter {
lfuItemMap
=
new
HashMap
<
String
,
Integer
>();
lfuItemMap
=
new
HashMap
<
String
,
Integer
>();
jobLfuMap
.
putIfAbsent
(
jobId
,
lfuItemMap
);
// 避免重复覆盖
jobLfuMap
.
putIfAbsent
(
jobId
,
lfuItemMap
);
// 避免重复覆盖
}
}
// put new
for
(
String
address:
addressList
)
{
for
(
String
address:
addressList
)
{
if
(!
lfuItemMap
.
containsKey
(
address
)
||
lfuItemMap
.
get
(
address
)
>
1000000
)
{
if
(!
lfuItemMap
.
containsKey
(
address
)
||
lfuItemMap
.
get
(
address
)
>
1000000
)
{
lfuItemMap
.
put
(
address
,
new
Random
().
nextInt
(
addressList
.
size
()));
// 初始化时主动Random一次,缓解首次压力
lfuItemMap
.
put
(
address
,
new
Random
().
nextInt
(
addressList
.
size
()));
// 初始化时主动Random一次,缓解首次压力
}
}
}
}
// remove old
List
<
String
>
delKeys
=
new
ArrayList
<>();
for
(
String
existKey:
lfuItemMap
.
keySet
())
{
if
(!
addressList
.
contains
(
existKey
))
{
delKeys
.
add
(
existKey
);
}
}
if
(
delKeys
.
size
()
>
0
)
{
for
(
String
delKey:
delKeys
)
{
lfuItemMap
.
remove
(
delKey
);
}
}
// load least userd count address
// load least userd count address
List
<
Map
.
Entry
<
String
,
Integer
>>
lfuItemList
=
new
ArrayList
<
Map
.
Entry
<
String
,
Integer
>>(
lfuItemMap
.
entrySet
());
List
<
Map
.
Entry
<
String
,
Integer
>>
lfuItemList
=
new
ArrayList
<
Map
.
Entry
<
String
,
Integer
>>(
lfuItemMap
.
entrySet
());
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
View file @
878df30b
...
@@ -4,6 +4,7 @@ import com.xxl.job.admin.core.route.ExecutorRouter;
...
@@ -4,6 +4,7 @@ import com.xxl.job.admin.core.route.ExecutorRouter;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
import
com.xxl.job.core.biz.model.TriggerParam
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
...
@@ -40,12 +41,24 @@ public class ExecutorRouteLRU extends ExecutorRouter {
...
@@ -40,12 +41,24 @@ public class ExecutorRouteLRU extends ExecutorRouter {
jobLRUMap
.
putIfAbsent
(
jobId
,
lruItem
);
jobLRUMap
.
putIfAbsent
(
jobId
,
lruItem
);
}
}
// put
// put
new
for
(
String
address:
addressList
)
{
for
(
String
address:
addressList
)
{
if
(!
lruItem
.
containsKey
(
address
))
{
if
(!
lruItem
.
containsKey
(
address
))
{
lruItem
.
put
(
address
,
address
);
lruItem
.
put
(
address
,
address
);
}
}
}
}
// remove old
List
<
String
>
delKeys
=
new
ArrayList
<>();
for
(
String
existKey:
lruItem
.
keySet
())
{
if
(!
addressList
.
contains
(
existKey
))
{
delKeys
.
add
(
existKey
);
}
}
if
(
delKeys
.
size
()
>
0
)
{
for
(
String
delKey:
delKeys
)
{
lruItem
.
remove
(
delKey
);
}
}
// load
// load
String
eldestKey
=
lruItem
.
entrySet
().
iterator
().
next
().
getKey
();
String
eldestKey
=
lruItem
.
entrySet
().
iterator
().
next
().
getKey
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment