Skip to content

[Feature]: 性能与长稳优化 #99

Description

@openjiuwen-collaboration-bot

🚀 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 🎉!

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions