🚀 Background Description
Java版本要做成企业级生产化agent产品,性能与稳定性非常关键;
agent-core-java从python版本移植能力时在多线程并发时有明显的翻译痕迹,没有把java多线程优势利用起来;
以及在执行链路上很多数据结构、锁控制、同步异步控制等存在低效的问题,需要优化。
Design Ideas
整体优化思路
I 池 → II 锁 → III 算法/数据结构 → IV 阻塞链 → V 配额 → VI 可观测。
┌─────────────────────────────────────────────────────────────┐
│ 维度 I 并发资源池控制 「有没有上限?能不能预算?」 │
├─────────────────────────────────────────────────────────────┤
│ 维度 II 锁与同步原语 「谁在互斥?持锁多久?」 │
├─────────────────────────────────────────────────────────────┤
│ 维度 III 数据结构与算法 「每次操作做多少活?O(?) 多少?」 │
├─────────────────────────────────────────────────────────────┤
│ 维度 IV 热路径阻塞与异步化 「线程在等什么?能否让出?」 │
├─────────────────────────────────────────────────────────────┤
│ 维度 V 外部配额与背压 「LLM/连接/SSE 总量谁说了算?」 │
├─────────────────────────────────────────────────────────────┤
│ 维度 VI 可观测与 Benchmark 「改完能否证明、能否回归?」 │
└─────────────────────────────────────────────────────────────┘
细节展开
并发资源池控制(资源有没有顶?)
线程池统一规划&优化
整体治理要求
OpenJiuwenExecutors 统一注册;启动 dump 池清单;禁止新增 (0, MAX_VALUE) 池
CachedThreadPool(Integer.MAX_VALUE)统一整改为有界线程池
TaskExecutorPool
pregel-task
Workflow
workflow-stream
Vertex
vertex-stream
StreamActor
stream-actor
TemplateProcessor
end-template-render
CallbackFramework
callback-parallel
MqServerAdapter
mq-server-adapter
无池裸Thead池化
ReActAgent stream 线程池化
Runner.runAgentStreamingAsync
TaskScheduler
scheduleLoop里new Thread,虽然跑的任务里用了统一线程池OpenJiuwenExecutors.newScheduledThreadPool固定为1的线程,但只是为了搞定超时才用
统一线程池纳管
DeepAgent stream自己new ThreadPoolExecutor
当前是8,
SpawnManager自己new ThreadPoolExecutor
当前是max(16,cpu*2)
EventBus自己new ThreadPoolExecutor
线程池大小固定为1
超大池整改
TaskManager executor
task-manager-worker
Runtime线程池规划
SSE 执行器隔离
问题:QueryMvcController:129 CompletableFuture.runAsync(...) 无 executor → commonPool(并行度 ≈ CPU−1);streamToEmitter 阻塞整个 LLM 流时长。
切换 Core react API
问题:JiuwenCoreAgentHandler 使用 Runner.runAgentStreaming(阻塞 Iterator);Core 已有 runAgentStreamingAsync → Flux。
ExternalCallExecutor 重构
问题:静态 ThreadPoolExecutor(0, 64, SynchronousQueue, AbortPolicy);LLM/Tool/MCP 共享;future.get + Thread.sleep 阻塞。
A2A 线程池与协调锁
问题:ioPool=2 + 无界队列;RemoteInvocationCoordinatorState 单锁;ActiveStreamRegistry.awaitDrain 忙等 onSpinWait。
子主题
非线程类的其他资源池化
Teammate 槽位池
目的:单进程场景下、spwan成员时控制最大成员数,避免过多成员引发OOM和线程资源耗尽(目前submit侧已经有有界线程池控制、能限制住worker并发数,一个成员work时一般对应4个线程:1条worker+3条eventbus)
连接池
HTTP Client 连接池
Session
同 session 防并发 ReAct
Involved Public APIs
Description of Relevance to Other Modules
Test Design and Test Plan
1、引入业界权威的Agent性能Benchmark,开展性能专项测试;
2、UT补充核心场景的并发测试用例,关注OOM与性能表现。
Additional Information
Thanks for your contribution 🎉!
🚀 Background Description
Design Ideas
整体优化思路
I 池 → II 锁 → III 算法/数据结构 → IV 阻塞链 → V 配额 → VI 可观测。
细节展开
Involved Public APIs
Description of Relevance to Other Modules
Test Design and Test Plan
1、引入业界权威的Agent性能Benchmark,开展性能专项测试;
2、UT补充核心场景的并发测试用例,关注OOM与性能表现。
Additional Information
Thanks for your contribution 🎉!