124 记一次 大模型无限输出 “--“ 导致的短时间频繁 ygc

前言

这是一个生产问题, 从监控中发现 服务器节点 频繁进行 ygc, 没有 太大的规律

然后 大概会持续 一个小时左右, 然后 后面就自己好了, 也不会影响 具体的业务服务

具体的详细的 排查方式, 策略 这里就不写了, 没有精力 去写了

这里 直接 贴最终的结果, 复现的方式

上游的流式服务

这里直接构造 由于大模型幻觉或者其他影响导致的 大模型无限输出 "--"

复制代码
@RestController
@RequestMapping("/HelloWorld")
public class HelloWorldController {

    @PostMapping("/flowResponse")
    public void flowResponse(HttpServletResponse response) throws Exception {
        response.setContentType("text/event-stream");
        response.setCharacterEncoding("utf8");
        PrintWriter pw = response.getWriter();

        for (int i = 1; i < Integer.MAX_VALUE; i++) {
            pw.println(String.format("---"));
            pw.flush();
            Thread.sleep(10);
        }
    }

}

下游的业务服务

下游业务服务就是 从流式服务获取增量的文本, 然后 输出给前端页面

复制代码
/**
 * Test27PostInfiniteFlowRequest
 *
 * @author Jerry.X.He <970655147@qq.com>
 * @version 1.0
 * @date 2025-06-22 07:29
 */
public class Test27PostInfiniteFlowRequest {

    // Test26PostFlowRequest
    public static void main(String[] args) {

        String url = "http://localhost:8080/HelloWorld/flowResponse";
//        String url = "http://localhost:80/HelloWorld/flowResponse";
        Map<String, String> headers = URLConnectionUtils.commonHeaders();
        String postBody = "{}";

        StringBuilder fullContent = new StringBuilder();
        HttpResponse resp = URLConnectionUtils.postBodyWithFlow(url, headers, postBody, "utf8", line -> {
            fullContent.append(line);
            System.out.println(fullContent);
        });
        int x = 0;

    }

}

gc 情况记录

现象就是 短时间内出现了多次 ygc, ygc 的主要就是 String.valueOf(fullContent)

由于内容越来越长, 单个 String.valueOf(fullContent) 占用的空间越来越大, 并且 无限在输出, 因此导致了 频繁的ygc

heapdump 的现象

字符串 倒序拍一下, 然后 找到嫌疑的 String, 结合业务代码 推导一下

轻量级一点的话, 直接结合多个 jstack 进行判断, 就可以了, 只是所谓的生产 各种条条框框罢了

相关推荐
M-Robots echo1 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~2 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
mldong3 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe4 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一514 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
gugucoding4 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nebula_g5 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
AC赳赳老秦5 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
小强库计算机毕业设计7 小时前
SpringBoot+Vue3 学生宿舍管理系统实战
java·spring boot·后端·vue·学生宿舍管理系统
李冰然7 小时前
深入Java集合框架:HashMap源码解析(JDK 8)
java