老废物乐园 瓜子的技术笔记 · Java / AI / 金融科技

归档

2023 年 01 月

毫无征兆的线程池打满 新上线的网关用 JDK 21 虚拟线程处理请求。压测到 8000 并发时,吞吐量突然从 1.2 万 req/s 跌到谷底,响应从 30ms 飙到 8 秒,CPU 却只有 40%——典型的"线程都在等,CPU 没事干"。jstack 一看,200 个平台线程(carrier)全卡
为什么要看 Java 的 LLM 框架 团队要做个工单自动分类的小工具,调用 OpenAI。一开始我手搓 HttpClient 拼 JSON,发现每加一个能力就要重写一遍请求体、解析流、管上下文。更烦的是流式输出要自己处理 SSE,错误码要自己映射,超时和重试也要自己写。做了两个功能之后,代码里一半
一个被语法糖耽误的拼接需求 上周我要拼一段带变量的 SQL 调试日志,里面混入三个变量。老写法要么是加号拼接,要么是 String.format,前者冗长后者位置参数容易错位。听同事说 JDK 21 的预览特性 String Templates 把这件事做漂亮了,我拉了 early-access 构

2022 年 12 月

背景:4.x 到 5.x 的跨代升级 八月底我们把分库分表中间件从 ShardingSphere 4.1 升到 5.3。4.x 用的还是旧的 sharding-jdbc 单库形态,配置散在 Spring 的 xxx.yaml 里;5.x 统一成了 shardingsphere-jdbc,配置模型完全
背景:大促前的压测暴露了长尾 八月底大促压测,核心的下单查询接口平均 RT 只有 120ms,看着挺好,但 P99 飙到 800ms,监控里偶发还有 1.5 秒的尖刺。平均好看掩盖了长尾,而用户体验恰恰被那 1% 的慢请求毁掉。我接了这活,目标是把 P99 压到 150ms 以内。 全链路耗时分析:
现象:容器 4 核,GC 却开了 24 个线程 八月初一个 Pod 频繁被 K8s 驱逐,OOMKilled 日志看着是内存超了,但监控显示内存没到 limit。我进容器一查 CPU 使用率 400%——而这 Pod 只申请了 4 核。根因是 GC 线程数按宿主机 24 核算的,Parallel G
背景:ZooKeeper 又成了单点隐患 七月中我们的 Kafka 集群(3.2 版本,还跑在 ZooKeeper 上)遇到一次 ZK 会话超时,导致整个集群控制器选举卡了 90 秒,消息生产大面积抖动。ZK 那套独立组件既要单独运维、又要和 Kafka 版本对齐,一直是心腹大患。Kafka 3.3

2022 年 11 月

背景:团队新人又慌了 七月一次支付成功率骤降,新来的同学第一反应是「我先重启试试」。结果重启把现场冲了,后面复盘只能靠猜。这种事不是第一次,我干脆把我们的线上排查 SOP 固化成文档,要求所有人遇事先照流程走,别凭直觉乱动。 第一原则:止血优先 出问题第一时间想的不是「为什么」,是「怎么不让它继续坏
背景:RestTemplate 越用越别扭 七月我们在预发环境试了 Spring 6.1 的里程碑版本(6.1 当时还没 GA,计划十一月随 Boot 3.2 一起),最让我眼前一亮的是 RestClient 和 HTTP Interface。以前用 RestTemplate,拼 URL、处理异常、
告警:一条 JOIN 把从库 CPU 拉满 七月五号,DBA 在群里 @我:「你那条报表 SQL 把从库 CPU 干到 100%,跑了 40 秒还没出」。这是一条订单表(8000 万行)和用户表(2000 万行)的关联查询,原本是凌晨跑的批,被临时拉到白天查。我拿 EXPLAIN 一看,问题很清楚。