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 进行判断, 就可以了, 只是所谓的生产 各种条条框框罢了

相关推荐
biubiubiu070618 小时前
SpringBoot生产级日志配置
java·spring boot·后端
ch.ju18 小时前
Java Programming Chapter 4——Inherited call
java·开发语言
是有头发的程序猿18 小时前
竞品分析 + 用户洞察自动化|基于 item_review 评论接口 + 多 AI Agent 实现淘宝评论全量采集与智能分析(附python源码)
java·python·自动化
凤凰院凶涛QAQ18 小时前
《Java版数据结构 & 集合类剖析》链表与LinkedList:节点手拉手,增删不用愁
java·数据结构·链表
唐青枫18 小时前
Java MyBatis 实战指南:XML 映射、动态 SQL 与数据访问层设计
java·mybatis
码语智行18 小时前
MQTT 配置、依赖与使用说明
java·物联网·mt
_日拱一卒18 小时前
LeetCode:39组合总和
java·算法·leetcode·职场和发展
郝学胜-神的一滴18 小时前
力扣 662 :二叉树最大宽度
java·数据结构·c++·python·算法·leetcode·职场和发展
仙俊红19 小时前
反射到底解决什么问题?
java·开发语言
小森林之主19 小时前
凌晨3点的闹钟:分布式定时任务设计实战
java·redis·任务调度·cron·分布式定时任务