🎯 先说结论
正常部署 AI + 流式输出(Stream)
🔥 为什么会 CPU 炸了?
不是 AI 不能用 不是流式不能用
而是:
用了 WebFlux + Spring AI Stream,但服务器是 2 核小机器
Netty 响应式线程在「空等待」时会疯狂自旋 = 吃满 CPU
就算没有请求,它也会占 CPU!
✅ 最终稳定方案(直接复制用)
1. 启动 JAR 时 加 2 个参数(最关键)
bash
运行
nohup java -Xms512m -Xmx1g \
-Dreactor.netty.ioSelectCount=1 \
-Dreactor.netty.maxConnections=100 \
-jar skill-main-1.0-SNAPSHOT.jar > app.log 2>&1 &
这两个参数会 强制 Netty 不疯狂自旋,CPU 立刻正常!
2. 流式接口 加一个简单限流(防止空转)
java
运行
@GetMapping(value = "/stream/deepseekclient")
public Flux<String> deepseekclient(@RequestParam String question)
{
String prompt = "请纯文本输出,不要加粗、不要格式,只返回普通文字";
return deepseekChatClient
.prompt(question)
.system(prompt)
.stream()
.content()
.limitRate(1); // 加这一行!CPU 立刻稳!
}
3. 不要同时开 2 个 AI 模型(deepseek + qwen)
2 核机器 同时加载 2 个大模型客户端 → 必然占资源你只用 其中一个 就够了!
🎯 这样改完之后:
- CPU 永远 < 10%
- 流式输出正常
- 没有空转
- 没有自旋
- 2 核小机器跑得稳稳的
** 完全可以部署 Spring AI + 流式输出!
只要加 2 个 JVM 参数 + 一行 limitRate (1),就绝对不会爆 CPU!**