
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
整个命令系统的核心是一个 Schema 定义:8 个字段定义一条命令的一切。最关键的字段是template—— 它的类型是,注释写得很清楚:有些命令模板是 MCP 远程解析的懒加载 Promise,不是静态字符串。你可能会想:为什么不用string而是用Unknown?这不就丢了类型安全吗?作者的选择恰恰相反:Unknown不是放弃类型,而是拥抱两种加载模式。静态模板在初始化时就拿到字符串,MCP

如果你要设计一个能从终端命令一路走到 AI Agent 循环的架构——用户敲一行 ,你的系统怎么把这个字符串变成一次完整的 LLM 推理?你可能会想:这有什么难的? 解析一下,switch-case 分发,函数里调 LLM,完事。对,但如果你的 CLI 有 20+ 个选项、3 种交互模式(非交互/本地交互/远程附加)、还需要加载完整的项目上下文(配置、插件、Provider)——switch-ca

摘要: 本文记录了一次线上订单服务性能问题的排查过程。现象表现为CPU使用率仅25%,但p99响应时间从30ms飙升至823ms。通过top、jstack、perf等工具组合分析,发现大量线程处于RUNNABLE状态但实际阻塞在Socket I/O等待,根源在于新版代码使用默认HttpClient(单连接)调用外部评分服务,导致高并发时连接争用。修复方案包括:自定义连接池、设置超时和熔断机制,最终

这次事故的表面原因是为什么测试没发现?单元测试单线程运行,不会暴露锁竞争为什么压测没发现?压测数据量小(100 QPS),线程池连接数少,竞争不明显为什么监控没告警?CPU 阈值设的是 90%,而实际最高 85%预防锁竞争类问题,最有效的手段不是优化锁实现,而是在设计阶段就问自己三个问题这段代码需要多线程访问吗?→ 如果是,走问题 2数据是共享的吗?→ 如果是,走问题 3能不能用无锁数据结构?→

total=10(默认最大连接数),active=10(全部被占),waiting=42(42 个线程排队等连接)。开发老K说:新项目搭起来直接用了 Spring Boot 默认的 HikariCP,谁也没想过要改连接池参数。开发环境流量小,10 个连接绰绰有余,从来没出过问题。Spring Boot 的自动配置很方便,但 HikariCP 的默认值是为「能跑起来」设计的,不是为「生产可用」设计的

经分析,这些是 Druid 连接池专有参数名称,项目从 Druid 迁移到 Spring Boot 2.7 默认的 HikariCP 后删除了 Druid 依赖,但未将配置参数迁移为 HikariCP 格式(spring.datasource.hikari.maximum-pool-size)。total=10, active=10, idle=0, waiting=63——10 个连接全被占了,

这是 Metaspace 的软限制触发 GC——当 Metaspace 使用量达到当前容量上限的一个阈值(默认 80-90%)时,JVM 会触发一次 Full GC 尝试回收未使用的类元数据。的 LGCC(上次 GC 原因)同样是 “Metadata GC Threshold”,这与前面的分析一致——每次 GC 都是 Metaspace 满了触发的,而 GC 后 Metaspace 使用率没有显著

解决方案是创建复合索引 idx_status_time(order_status, create_time),优化后 type 变为 ref,扫描行数降至 4.87 万,查询耗时从 18.42 秒降至 0.06 秒。三个条件分别有自己的单列索引,但没有一个索引能同时覆盖 order_status(等值)和 create_time(范围)。’ 过滤后约 67%,两个条件叠加有优化的空间。:将等值条件

在 2G 小堆下,ZGC 的并发优势完全没有发挥空间——堆太小,一次并发标记很快就能完成,但并发标记的启动条件在高分配率下被频繁触发,反而带来了 Allocation Stall 的惩罚。但在 ZGC 下,这些列全是空的——因为 ZGC 没有传统的 Young/Full GC 概念,取而代之的是。ZGC 感知到高分配率后会启动并发标记,但每次并发标记还没完成,新的分配请求又在堆积。在不到 20 分










